web-dev-qa-db-fra.com

Combinaison de type de message personnalisé et de taxonomie

Est-il possible de créer une structure de permalien/modèle comme ceci:

www.example.com/attractions                  <-- post type archive
www.example.com/attractions/museums          <-- taxonomy archive
www.example.com/attractions/van-gogh-museum  <-- custom post type

Après avoir essayé plusieurs jours, je ne peux utiliser qu'une des deux combinaisons: soit type de poste + archive du type de publication ou taxonomie + archive de la taxonomie

Je ne sais pas quoi faire ensuite: suis-je en train de négliger quelque chose, ai-je besoin d'un plugin, dois-je le configurer différemment?

=== modifier ===

(juste penser à voix haute)

Pour le moment, j'utilise des fonctionnalités de réécriture de type publication et taxonomie, comme ceci:

'rewrite' => array('slug'=>'attractions'),

mais peut-être devrais-je choisir un autre itinéraire et définir manuellement "attractions" comme page parente du type de publication personnalisé et de l'archive de taxonomie.

===/edit ===

J'espère que quelqu'un pourra me diriger dans la bonne direction. Toutes les suggestions sont très appréciées!

2
Mattvic
// Add the new post_type and taxonomy
add_action('init', function(){
    // Add a post_type named 'testype'
    register_post_type($postype = 'testype', $arguments = array(
        'name'                  => $postype,
        'label'                 => 'Test',
        'public'                => true,
        'exclude_from_search'   => true,
        'capability_type'       => 'post',
        'supports'              => array(
            'title', 'excerpt', 'editor', 'custom-fields', 'comments',
        ),
        'show_in_nav_menus'     => false,
        'hierarchical'          => false,
        'publicly_queryable'    => true,
        'rewrite'               => array(
            'with_front'    => false,
            'pages'         => true,
            'feeds'         => true,
            'slug'          => 'test/read',
            // This is my custom work, not stock functionality
            // 'permastruct'    => '%id%'
        ),
        'query_var'             => 'testing',
        'has_archive'           => true,
        'show_ui'               => true,
        'can_export'            => true,
        '_builtin'              => false,
    ));
    register_taxonomy($postax = 'testax', $postype, array(
        'label'         => 'Tax',
        'hierarchical'  => false,
        'rewrite'       => array(
            'with_front'        => false,
            'pages'             => true,
            'feeds'             => true,
            'slug'              => 'test/browse',
        ),
        'public'            => true,
        'show_ui'           => true,
        'query_var'         => true,
        'show_in_nav_menus' => true,
        'show_tagcloud'     => false,
    ));
});
// Add the 'snippet' postype to the loop.
add_action('pre_get_posts', function(\WP_Query $query){
    if(!is_archive()) return; // Only for archives!
    // If suppress_filters is on, bail here :) (no idea what this really does)
    if(!empty($query->query_vars['suppress_filters'])) return;
    // Add a new post type to the loop if we are visiting the archive
    // of a taxonomy assigned to the post.
    if(!empty($query->query_vars['testax'])){
        $post_types = $query->get('post_type');
        if(empty($post_types)) $post_types = array('post');
        elseif(is_string($post_types)) $post_types = array($post_types);
        // Add the new post_type now
        $query->set('post_type', array_merge($post_types, array('testype')));
    }
    return;
});

Cheers! Ceci est entièrement fonctionnel et commenté. Il a la syntaxe PHP 5.3 comme je ne le fais plus et je suis aussi un peu paresseux. Je suis sûr que vous pouvez gérer l'extraction de fonction si vous utilisez toujours la version 5.2.

Dites-moi comment ça se passe et si vous avez des questions.

1
EarnestoDev

Voir si cette réponse aide:Comment ajouter un lien (href) alors quand je clique dessus, il affiche (affiche tous) les messages de messages personnalisés type (rich_media), de la catégorie actuelle?

Vous devez ajouter le nouveau post_typeau pre_get_postspour que tout fonctionne correctement dans Term Archives (Catégories, Tags) . Et assurez-vous d'activer archivesur votre type de message personnalisé.

0
EarnestoDev