En primer lugar, si desea mostrar el metabox de taxonomía solo para el tipo de publicación personalizado, registre la taxonomía solo en ese tipo de publicación personalizada pasando el nombre de tipo de publicación personalizado como argumento en register_taxonomy. Al hacer esto, el metabox de taxonomía aparece solo para el tipo de publicación personalizada. Si no desea mostrar el metabox de la categoría en el tipo de publicación personalizada, elimine el término categoría como argumento al registrar el tipo de publicación personalizada y en su lugar incluya el nombre de la franja de taxonomía como esta 'taxonomías' = > array ('post_tag', 'your_taxonomy_name'). Aquí está el código de cómo logré eso.
He registrado una taxonomía personalizada con slug themes_categories bajo los temas de tipo de publicación personalizados
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');
Luego, para cambiar el enlace permanente, he creado la siguiente función
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);
Luego registré un tipo de publicación personalizada con temas de slug como se muestra a continuación
//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
}
Hay algunas cosas que debes recordar al registrar publicaciones personalizadas. cambie el parámetro has_archive al nombre de la barra de tipo de publicación personalizada y otro es cambiar el nombre de la barra de reescritura como 'slug' = > 'custom_post_type_slug /% taxonomy_slug%
Ahora, cuando agregue un nuevo tipo de publicación en la página de escritura de tipo de publicación ... verá el enlace permanente como
enlace .
Si no se selecciona la taxonomía personalizada para esta publicación, el enlace permanente seguirá siendo enlace , que luego mostrará una solicitud incorrecta.
Para corregir esto creamos un término predeterminado en la taxonomía personalizada. (Igual que sin categorizar en categorías)
Añade esto a functions.php
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 );
Ahora, cuando la taxonomía personalizada se deja en blanco, el permlaink se convierte en
enlace automáticamente.
Por último, no olvide vaciar la reescritura haciendo clic en guardar cambios en la configuración del enlace permanente en la sección de administración, de lo contrario, se le redirigirá al error 404. Espero que esto te ayude.