Taxonomía personalizada específica para un tipo de publicación personalizada

26

Quiero crear una taxonomía personalizada que se comporte de manera similar al tipo de publicación, ya que una categoría se comporta con las publicaciones predeterminadas (en base a /% category% /% postname% / permalink structure) para que las publicaciones en la costumbre los tipos de mensajes se muestran como www.example.com/custom-post-type/custom-taxonomy-name/post-name También quiero que aparezca el cuadro de meta de la categoría solo cuando agregamos una nueva publicación predeterminada y no cuando agregamos una nueva publicación en el tipo de publicación personalizada y el cuadro de taxonomía personalizada aparezca solo cuando agregamos una nueva publicación en el tipo de publicación personalizada y no cuando agregamos una publicación predeterminada nueva.

    
pregunta Saurabh Goel 05.07.2012 - 12:22

2 respuestas

45

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.

    
respondido por el Rabin shrestha 05.07.2012 - 16:52
1

es decir, registre una taxonomía personalizada MY_NEW_CARSS para los tipos de publicaciones personalizadas:

$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
    }
}
    
respondido por el T.Todua 25.07.2015 - 20:32

Lea otras preguntas en las etiquetas