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(){ ?>
post_type); ?>
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;