true
));
// loop
foreach($post_types as $name => $object){
// parent
$parent = $this->get_menu_parent_slug($object);
// label
$label = __('Archive (%s)');
$label = preg_replace('/ /', '', $label);
// capability
$capability = acf_get_setting('capability');
$capability = apply_filters_deprecated("acfe/post_type_archive_capability", array($capability, $name), '0.8.9.1', "acfe/validate_post_type_archive");
$capability = apply_filters_deprecated("acfe/post_type_archive_capability/name={$name}", array($capability, $name), '0.8.9.1', "acfe/validate_post_type_archive/name={$name}");
// arguments
$args = array(
'page_title' => "{$object->label} {$label}",
'menu_title' => $label,
'menu_slug' => "{$name}-archive",
'post_id' => "{$name}_archive",
'capability' => $capability,
'redirect' => false,
'parent_slug' => $parent,
'updated_message' => $object->label . ' Archive Saved.',
'acfe_post_type_archive' => $name,
);
// filters
$args = apply_filters("acfe/validate_post_type_archive", $args);
$args = apply_filters("acfe/validate_post_type_archive/name={$name}", $args);
// add options page
acf_add_options_page($args);
}
}
/**
* current_screen
*/
function current_screen(){
// global
global $plugin_page;
if(empty($plugin_page)){
return;
}
// get options pages
$options_pages = acf_get_options_pages();
if(!empty($options_pages) && isset($options_pages[ $plugin_page ]) && isset($options_pages[ $plugin_page ]['acfe_post_type_archive'])){
// assign global post type for later hooks
$this->post_type = $options_pages[ $plugin_page ]['acfe_post_type_archive'];
// location screen
add_filter('acf/location/screen', array($this, 'location_screen'));
// get object
$post_type_obj = get_post_type_object($this->post_type);
if(acfe_get($post_type_obj, 'has_archive') || $post_type_obj->name === 'post'){
// add permalink under title
add_action('admin_footer', array($this, 'admin_footer'));
}
}
}
/**
* location_screen
*
* acf/location/screen
*
* @param $screen
*
* @return mixed
*/
function location_screen($screen){
$screen['acfe_post_type_archive'] = true;
return $screen;
}
/**
* admin_footer
*/
function admin_footer(){
?>
name;
}
}
if(!$post_type){
return;
}
// get object
$object = get_post_type_object($post_type);
// check has archive
$has_archive = acfe_get($object, 'has_archive') || $object->name === 'post';
$has_archive_page = acfe_get($object, 'acfe_admin_archive');
if(!$has_archive || !$has_archive_page){
return;
}
// get options pages
$options_pages = acf_get_options_pages();
if(empty($options_pages)){
return;
}
$options_page = false;
// loop options pages
foreach($options_pages as $page){
// validate page
if(acfe_get($page, 'acfe_post_type_archive') === $post_type){
$options_page = $page;
break;
}
}
if($options_page){
// get capability
$capability = $options_page['capability'];
// check capability
if(current_user_can($capability)){
// parent
$parent = $this->get_menu_parent_slug($object);
// add menu item
$wp_admin_bar->add_node(array(
'id' => 'edit',
'title' => __('Edit') . ' ' . $object->label . ' ' . __('Archive'),
'parent' => false,
'href' => add_query_arg(array('page' => "{$object->name}-archive"), admin_url($parent)),
'meta' => array('class' => 'ab-item')
));
}
}
}
/**
* get_options_pages
*
* acf/get_options_pages
*
* @param $pages
*
* @return mixed
*/
function get_options_pages($pages){
// validate ACF admin or aajax call
if(acfe_is_admin_screen() || wp_doing_ajax()){
foreach($pages as $page => $args){
// unset options page
if(acfe_get($args, 'acfe_post_type_archive')){
unset($pages[ $page ]);
}
}
}
return $pages;
}
/**
* get_menu_parent_slug
*
* @param $object
*
* @return string
*/
function get_menu_parent_slug($object){
$name = $object->name;
// parent
$parent = "edit.php?post_type={$name}";
$parent = $name === 'post' ? 'edit.php' : $parent; // post
$parent = $name === 'attachment' ? 'upload.php' : $parent; // attachment
// allow post type custom 'show_in_menu' like 'options-general.php'
if(!empty($object->show_in_menu) && is_string($object->show_in_menu)){
$parent = $object->show_in_menu;
}
return $parent;
}
}
acf_new_instance('acfe_form_post_type_archive');
endif;