web-dev-qa-db-fra.com

Liens permanents pour la taxonomie et le type de message personnalisé

Avoir la situation suivante ici:

Type de message personnalisé: 'recettes'
Taxonomie pour les recettes personnalisées de type publication: 'receitas'
Une des taxonomies slug: 'receitas-whoopie-pie'

La structure de lien permanent DOIT être:

example.com/receitas (affiche toutes les publications de type 'recettes' personnalisées, il peut s'agir d'un modèle de page si nécessaire)
example.com/receitas-whoopie-pie (affichez tous les posts de type 'recettes' personnalisés sous la taxonomie 'recipescat' -> 'receitas-whoopie-pie')
example.com/receitas-whoopie-pie/post_name (affichez un message singulier sous la taxonomie 'receitas' -> 'receitas-whoopie-pie')

J'ai essayé de nombreuses manières de le faire par le biais de filtres, le seul qui fonctionne, donnez-moi une page 404 lorsque vous accédez à .../receitas-whoopie-pie/post_name.

En fait, j'ai la structure suivante:


Mes fonctions indépendamment de ce problème:
example.com/receitas (affiche toutes les publications de type de recettes 'recettes' personnalisées - modèle de page)
Exemple.
example.com/recipes/post_name (affiche un message unique sous la taxonomie 'receitas' -> 'receitas-whoopie-pie')

add_action( 'init', 'receitas_posttype', 0 );
function receitas_posttype() {

    $labels = array(
        'menu_name'           => 'Receitas',
        'name'                => 'Receitas',
        'singular_name'       => 'Receita',
        'parent_item_colon'   => '',
        'all_items'           => 'Todas as Receitas',
        'view_item'           => 'Ver Receita',
        'add_new_item'        => 'Adicionar Receita',
        'add_new'             => 'Nova Receita',
        'edit_item'           => 'Editar Receita',
        'update_item'         => 'Atualizar Receita',
        'search_items'        => 'Pesquisar Receita',
        'not_found'           => 'Receita(s) não encontrada(s)',
        'not_found_in_trash'  => 'Receita(s) não encontrada(s) no lixo'
    );  

    $args = array(
        'label'               => 'recipes',
        'description'         => 'Receitas',
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'author', 'thumbnail' ),
        'hierarchical'        => true,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 100,
        'menu_icon'           => get_bloginfo('stylesheet_directory').'/images/receitas.png',
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
    );

    register_post_type( 'recipes', $args );

}

add_action( 'init', 'receitascat', 0 );
function receitascat()  {

    $labels = array(
        'name'                       => _x( 'Receitas', 'Taxonomy General Name', 'ickfd' ),
        'singular_name'              => _x( 'Receita', 'Taxonomy Singular Name', 'ickfd' ),
        'menu_name'                  => __( 'Categorias de Receita', 'ickfd' ),
        'all_items'                  => __( 'Todas as categorias', 'ickfd' ),
        'parent_item'                => __( 'Categoria pai', 'ickfd' ),
        'parent_item_colon'          => __( 'Categoria pai:', 'ickfd' ),
        'new_item_name'              => __( 'Nova categoria', 'ickfd' ),
        'add_new_item'               => __( 'Adicionar nova categoria', 'ickfd' ),
        'edit_item'                  => __( 'Editar categoria', 'ickfd' ),
        'update_item'                => __( 'Atualizar categoria', 'ickfd' ),
        'separate_items_with_commas' => __( 'Separe as categorias com vírgula', 'ickfd' ),
        'search_items'               => __( 'Pesquisar categorias', 'ickfd' ),
        'add_or_remove_items'        => __( 'Adicionar ou remover categorias', 'ickfd' ),
        'choose_from_most_used'      => __( 'Escolha as categorias mais usadas', 'ickfd' ),
    );
    $rewrite = array(
        'slug'                       => 'receitas',
        'with_front'                 => true,
        'hierarchical'               => true,
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => false,
        'rewrite'                    => $rewrite,
    );
    register_taxonomy( 'receitas', 'recipes', $args );

}

Les fonctions qui ont fonctionné, mais avec 404 pages au singulier:

add_action( 'init', 'receitas_posttype', 0 );
function receitas_posttype() {

    $labels = array(
        'menu_name'           => 'Receitas',
        'name'                => 'Receitas',
        'singular_name'       => 'Receita',
        'parent_item_colon'   => '',
        'all_items'           => 'Todas as Receitas',
        'view_item'           => 'Ver Receita',
        'add_new_item'        => 'Adicionar Receita',
        'add_new'             => 'Nova Receita',
        'edit_item'           => 'Editar Receita',
        'update_item'         => 'Atualizar Receita',
        'search_items'        => 'Pesquisar Receita',
        'not_found'           => 'Receita(s) não encontrada(s)',
        'not_found_in_trash'  => 'Receita(s) não encontrada(s) no lixo'
    );  

    $args = array(
        'label'               => 'recipes',
        'description'         => 'Receitas',
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'author', 'thumbnail' ),
        'hierarchical'        => true,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 100,
        'menu_icon'           => get_bloginfo('stylesheet_directory').'/images/receitas.png',
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'rewrite'             => true,
        'capability_type'     => 'post',
    );

    register_post_type( 'recipes', $args );

}

// Ativação das categorias (taxonomias) do custom post type
add_action( 'init', 'receitascat', 0 );
function receitascat()  {

    $labels = array(
        'name'                       => _x( 'Receitas', 'Taxonomy General Name', 'ickfd' ),
        'singular_name'              => _x( 'Receita', 'Taxonomy Singular Name', 'ickfd' ),
        'menu_name'                  => __( 'Categorias de Receita', 'ickfd' ),
        'all_items'                  => __( 'Todas as categorias', 'ickfd' ),
        'parent_item'                => __( 'Categoria pai', 'ickfd' ),
        'parent_item_colon'          => __( 'Categoria pai:', 'ickfd' ),
        'new_item_name'              => __( 'Nova categoria', 'ickfd' ),
        'add_new_item'               => __( 'Adicionar nova categoria', 'ickfd' ),
        'edit_item'                  => __( 'Editar categoria', 'ickfd' ),
        'update_item'                => __( 'Atualizar categoria', 'ickfd' ),
        'separate_items_with_commas' => __( 'Separe as categorias com vírgula', 'ickfd' ),
        'search_items'               => __( 'Pesquisar categorias', 'ickfd' ),
        'add_or_remove_items'        => __( 'Adicionar ou remover categorias', 'ickfd' ),
        'choose_from_most_used'      => __( 'Escolha as categorias mais usadas', 'ickfd' ),
    );

    $rewrite = array(
            'slug'                       => '',
            'with_front'                 => false,
            'hierarchical'               => true,
        );

    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => true,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => false,
        'rewrite'                    => $rewrite,
    );
    register_taxonomy( 'receitas', 'recipes', $args );

}

function filter_post_type_link($link, $post)
{
    if ($post->post_type != 'recipes')
        return $link;

    if ($cats = get_the_terms($post->ID, 'receitas'))
        $link = str_replace('recipes', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Merci d'avance. Désolé pour mon mauvais anglais. :(

2
Cristiano Possa

Você já usou Permaliens de type de message personnalisé ?

Avez-vous déjà utilisé un type de message personnalisé permalien ?

Exemple: example.org/post_type/taxonomy_term_slug

1
Raank