Benutzerdefinierte Taxonomie, die für einen benutzerdefinierten Posttyp spezifisch ist

Ich möchte eine benutzerdefinierte Taxonomie erstellen, die sich ähnlich wie der Post-Typ verhält, wenn sich eine Kategorie zu den Standard-Posts verhält (aufgrund /% category% /% postname% / permalink-Struktur), so dass die Posts in den benutzerdefinierten Post-Typen sind angezeigt als www.example.com/custom-post-type/custom-taxonomy-name/post-name Ich möchte auch die Kategorie-Meta-Box nur angezeigt werden, wenn wir neue Standard-Post hinzufügen und nicht, wenn wir einen neuen Beitrag in der benutzerdefinierten hinzufügen Post-Typ und das benutzerdefinierte Taxonomie-Feld, das nur angezeigt wird, wenn wir einen neuen Post im benutzerdefinierten Post-Typ hinzufügen und nicht, wenn wir einen neuen Post hinzufügen.

Solutions Collecting From Web of "Benutzerdefinierte Taxonomie, die für einen benutzerdefinierten Posttyp spezifisch ist"

Wenn Sie Taxonomie-Metabox nur für benutzerdefinierte Post-Typen anzeigen möchten, registrieren Sie die Taxonomie nur für diesen benutzerdefinierten Post-Typ, indem Sie den Namen des benutzerdefinierten Post-Typs als Argument in register_taxonomie übergeben. Auf diese Weise wird die Taxonomie-Metabox nur für den benutzerdefinierten Beitragstyp angezeigt. Wenn Sie die Kategorie metabox nicht dem benutzerdefinierten Beitragstyp anzeigen möchten, entfernen Sie die Begriffskategorie als Argument, während Sie den benutzerdefinierten Beitragstyp registrieren, und fügen Sie stattdessen den taxonomy slug-Namen wie ‘taxonomies’ => array (‘post_tag’, ‘your_taxonomy_name’) ein. . Hier ist der Code, wie ich das erreicht habe. Ich habe eine benutzerdefinierte Taxonomie mit slug themes_categories unter benutzerdefinierten Post-Typ Themes registriert

function themes_taxonomy() { register_taxonomy( 'themes_categories', //The name of the taxonomy. Name should be in slug form (must not contain capital letters or spaces). 'themes', //post type name array( 'hierarchical' => true, 'label' => 'Themes store', //Display name 'query_var' => true, 'rewrite' => array( 'slug' => 'themes', // This controls the base slug that will display before each term 'with_front' => false // Don't display the category base before ) ) ); } add_action( 'init', 'themes_taxonomy'); 

Um den Permalink zu ändern, habe ich folgende function erstellt

 function filter_post_type_link($link, $post) { if ($post->post_type != 'themes') return $link; if ($cats = get_the_terms($post->ID, 'themes_categories')) $link = str_replace('%themes_categories%', array_pop($cats)->slug, $link); return $link; } add_filter('post_type_link', 'filter_post_type_link', 10, 2); 

Dann habe ich einen benutzerdefinierten Post-Typ mit Slug-Themen wie folgt registriert

 //Registering Custom Post Type Themes add_action( 'init', 'register_themepost', 20 ); function register_themepost() { $labels = array( 'name' => _x( 'Themes', 'my_custom_post','custom' ), 'singular_name' => _x( 'Theme', 'my_custom_post', 'custom' ), 'add_new' => _x( 'Add New', 'my_custom_post', 'custom' ), 'add_new_item' => _x( 'Add New ThemePost', 'my_custom_post', 'custom' ), 'edit_item' => _x( 'Edit ThemePost', 'my_custom_post', 'custom' ), 'new_item' => _x( 'New ThemePost', 'my_custom_post', 'custom' ), 'view_item' => _x( 'View ThemePost', 'my_custom_post', 'custom' ), 'search_items' => _x( 'Search ThemePosts', 'my_custom_post', 'custom' ), 'not_found' => _x( 'No ThemePosts found', 'my_custom_post', 'custom' ), 'not_found_in_trash' => _x( 'No ThemePosts found in Trash', 'my_custom_post', 'custom' ), 'parent_item_colon' => _x( 'Parent ThemePost:', 'my_custom_post', 'custom' ), 'menu_name' => _x( 'Themes Posts', 'my_custom_post', 'custom' ), ); $args = array( 'labels' => $labels, 'hierarchical' => false, 'description' => 'Custom Theme Posts', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'post-formats', 'custom-fields' ), 'taxonomies' => array( 'post_tag','themes_categories'), 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'menu_icon' => get_stylesheet_directory_uri() . '/functions/panel/images/catchinternet-small.png', 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'query_var' => true, 'can_export' => true, 'rewrite' => array('slug' => 'themes/%themes_categories%','with_front' => FALSE), 'public' => true, 'has_archive' => 'themes', 'capability_type' => 'post' ); register_post_type( 'themes', $args );//max 20 charachter cannot contain capital letters and spaces } 

Es gibt einige Dinge, an die Sie sich beim Registrieren von benutzerdefinierten Posts erinnern müssen. ändere den has_archive-Parameter in den benutzerdefinierten post-type slug name und ändere den rewrite slug name als ‘slug’ => ‘custom_post_type_slug /% taxonomy_slug%

Wenn Sie jetzt einen neuen Beitragstyp auf der Seite “Beitragstyp schreiben” hinzufügen, sehen Sie den Permalink als http://www.example.com/wordpress/themes/%themes_categories%/post-name/ . Wenn die benutzerdefinierte Taxonomie für diesen Post nicht ausgewählt ist, bleibt der Permalink http://www.example.com/wordpress/themes/%themes_categories%/post-name/, der dann eine ungültige Anfrage anzeigen wird. Um dies zu korrigieren, erstellen wir einen Standardbegriff in der benutzerdefinierten Taxonomie. (wie in Kategorien nicht kategorisiert) Fügen Sie dies zu functions.php hinzu

 function default_taxonomy_term( $post_id, $post ) { if ( 'publish' === $post->post_status ) { $defaults = array( 'themes_categories' => array( 'other'), // ); $taxonomies = get_object_taxonomies( $post->post_type ); foreach ( (array) $taxonomies as $taxonomy ) { $terms = wp_get_post_terms( $post_id, $taxonomy ); if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) { wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy ); } } } } add_action( 'save_post', 'default_taxonomy_term', 100, 2 ); 

Wenn die benutzerdefinierte Taxonomie leer gelassen wird, wird der Permlaink automatisch zu http://www.example.com/wordpress/themes/other/post-name/ .

Vergessen Sie nicht, das Umschreiben zu löschen, indem Sie im Admin-Bereich auf Änderungen in der Permalink-Einstellung speichern klicken, ansonsten werden Sie zu 404 error weitergeleitet. Hoffe das hilft dir.

dh registrieren Sie eine benutzerdefinierte Taxonomie MY_NEW_CARSS für benutzerdefinierte Beitragstypen:

 $my_taxon_name = 'MY_NEW_CARSS'; $my_post_types = array('SUB_CAT_1','SUB_CAT_2','SUB_CAT_3'); //REGISTER CUSTOM TAXONOMY ( http://codex.wordpress.org/Function_Reference/register_taxonomy ) //If you aim to register HIERARCHICAL(Parent-ed) post type, read this warning: https://codex.wordpress.org/Function_Reference/register_post_type#hierarchical add_action( 'init', 'my_f32' ); function my_f32() { register_taxonomy( $GLOBALS['my_taxon_name'], array(), array( 'label'=>$GLOBALS['my_taxon_name'], 'public'=>true, 'show_ui'=>true, 'show_admin_column'=>true, 'query_var'=>true, 'hierarchical'=>true, 'rewrite'=>array('with_front'=>true,'hierarchical'=>true), )); } //REGISTER CUSTOM POST TYPE ( http://codex.wordpress.org/Function_Reference/register_post_type ) add_action( 'init', 'myf_63' );function myf_63() { foreach ($GLOBALS['my_post_types'] as $each_Type) { register_post_type( $each_Type, array( 'label'=>$each_Type, 'labels' => array('name'=>$each_Type.' pagess', 'singular_name'=>$each_Type.' page'), 'public' => true, 'publicly_queryable'=> true, 'show_ui'=>true, 'capability_type' => 'post', 'has_archive' => true, 'query_var'=> true, 'can_export' => true, //'exclude_from_search' => false, 'show_in_nav_menus' => true, 'show_in_menu' => 'edit.php?post_type=page',//true, 'menu_position' => 5, 'hierarchical' =>true, 'supports' =>array( 'page-attributes', 'title', 'editor', 'thumbnail' ), 'rewrite' => array('with_front'=>true, ), // 'rewrite' => array("ep_mask"=>EP_PERMALINK ...) OR 'permalink_epmask'=>EP_PERMALINK, )); register_taxonomy_for_object_type('category',$each_Type); //standard categories register_taxonomy_for_object_type($GLOBALS['my_taxon_name'] ,$each_Type); //Custom categories } }