Question

Est-ce un problème d'avoir une taxonomie personnalisée et un type de poste personnalisé utilisent la même structure de réécriture?

J'ai une taxonomie personnalisée people et un type de poste personnalisé people_bio. L'idée est que vous obtenez une liste des postes sur une personne avec une courte biographie en haut de la page. Je les combine dans mon fichier modèle taxonomy-people.php. Le permalien est /people/[person-slug].

Tant la taxonomie personnalisée et le type de poste personnalisé ont l'argument rewrite ensemble à array('slug' => 'people'). Cela semble travail: retourne get_term_link('seth-godin', 'people') /people/seth-godin/, et pour un type de poste personnalisé avec limace seth-godin, get_permalink() retourne également /people/seth-godin/. La taxonomie se définit d'abord, et il semble « gagner ». Sur une page /people/[slug], is_tax() est vrai, alors que is_single() est false

Alors, cela fonctionne, mais je ne me sens pas à l'aise avec elle. Est-ce quelqu'un de plus expérimenté avec le moteur de réécriture, et pouvez-vous me dire si cela peut casser d'autres choses?


La partie pertinente du fichier plugin, appelé dans l'action init:

register_taxonomy(
    'people',
    'post',
    array(
        'labels' => array(
            'name' => 'People',
            'singular_name' => 'Person',
            'search_items' => 'Search people',
            'popular_items' => 'Popular people',
            'all_items' => 'All people',
            'parent_item' => null,
            'parent_item_colon' => null,
            'edit_item' => 'Edit person',
            'update_item' => 'Update person',
            'add_new_item' => 'Add person',
            'new_item_name' => 'New person',
            'separate_items_with_commas' => 'Separate people with commas',
            'add_or_remove_items' => 'Add or remove people',
            'choose_from_most_used' => 'Choose from the most used people',
        ),
        'public' => true,
        'show_ui' => true,
        'show_tagcloud' => true,
        'hierarchical' => false,
        'update_count_callback' => '',
        'rewrite' => array(
            'slug' => 'people',
            'with_front' => true,
        ),
        'query_var' => 'people',
        'capabilities' => array(),
        'show_in_nav_menus' => true,
    )
);


register_post_type(
    'people_bio',
    array(
        'label' => 'People Bio',
        'labels' => array(
            'name' => 'Biographies',
            'singular_name' => 'Biography',
            'add_new' => 'Add new',
            'add_new_item' => 'Add new biography',
            'edit_item' => 'Edit biography',
            'new_item' => 'New biography',
            'view_item' => 'View biography',
            'search_items' => 'Search biographies',
            'not_found' => 'No biographies found',
            'not_found_in_trash' => 'No biographies found in trash',
            'parent_item_colon' => null,
        ),
        'description' => 'Biography pages of interesting people',
        'public' => true,
        'exclude_from_search' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'menu_position' => null,
        'menu_icon' => null,
        'capability_type' => 'post',
        'capabilities' => array(),
        'hierarchical' => false,
        'supports' => array(
            'title',
            'editor',
            //'author',
            'thumbnail',
            'excerpt',
            //'trackbacks',
            'custom-fields',
            //'comments',
            //'revisions',
            //'page-attributes',
        ),
        'register_meta_box_cb' => null,
        'taxonomies' => array(),
        'permalink_epmask' => EP_PERMALINK,
        //'rewrite' => false,
        'rewrite' => array(
            'slug' => 'people',
            'with_front' => true,
        ),
        'query_var' => true,
        'can_export' => true,
        'show_in_nav_menus' => true,
    )
);

register_taxonomy_for_object_type('people', 'people_bio');

(je toujours utiliser tous les paramètres avec register_*(), beaucoup avec leurs valeurs par défaut, comme une documentation supplémentaire, tant que le Codex est pas à jour)


Le fichier modèle de taxonomy-people.php:

<?php
get_header();

$people_biography = get_posts(array(
    'numberposts' => -1,
    'post_type' => 'people_bio',
    'taxonomy' => 'people',
    'term' => $wp_query->get_queried_object()->slug,
));
?>
<div class="container_24">
    <div class="grid_18" id="content" role="main">
        <?php if ($people_biography) :
            foreach ($people_biography as $bio) : ?>
                <h1><?php echo get_the_title($bio->ID); ?></h1>
                <?php
                echo get_the_post_thumbnail($bio->ID);
                echo apply_filters('the_content', $bio->post_content); ?>
        <?php
            endforeach;
         else: ?>
            <h1><?php esc_html_e($wp_query->get_queried_object()->name); ?></h1>
        <?php endif; ?>
        <?php get_template_part( 'loop', 'archive' ); ?>
    </div><!-- .content -->

    <div class="grid_6" id="default_sidebar">
        <?php dynamic_sidebar('default-sidebar'); ?>
    </div><!-- #default_sidebar -->
</div><!-- .container_24 -->
<div class="clear"></div>
<?php
get_footer();
?>

Mise à jour: La réécriture des règles générées

La sortie de mon Rewrite Analyzer me semble dire taxonomie « gagne » pour les pages de taxonomie régulière (qui est ce que j'ai remarqué), mais le type de poste personnalisé obtient toutes les autres URL (y compris la seconde pages, flux, ...). Voilà ce que je craignais, et que je devrai étudier plus. règles Réécrire pour la taxonomie des personnes et le type post

Était-ce utile?

La solution 3

Oui, cela donnera des questions. Les quatre règles de réécriture qui sont générés par la taxonomie personnalisée sont également utilisés par le type de poste personnalisé. Celui que vous enregistrer d'abord sera écrasé par celui que vous enregistrez après. Selon les règles similaires configuration exacte (hiérarchique par rapport non hiérarchique) pourraient se retrouver dans la liste des règles de réécriture finale, mais seul le premier sera « gagnant ».

Cela peut avoir pour effet que les requêtes /people/seth-godin/ pour une taxonomie personnalisée, mais les requêtes /people/seth-godin/page/2/ pour un type de poste personnalisé.

Autres conseils

Question: Est-ce un problème d'avoir une taxonomie personnalisée et un type de poste personnalisé utilisent la même structure de réécriture

Réponse: Oui.

Si elles partagent la même structure exacte, vous obtiendrez une condition de course, donc un de ceux inopérants. Mais je suppose que votre scénario ne conduit pas automatiquement aux mêmes règles de réécriture que les deux choses sont préfixés différemment.

Cela se produit parce que les règles de réécriture de permastructure (qui comprend ceux créés par l'enregistrement post_types et taxonomies) sont gérées par un array_merge (). Le array_merge remplacera toute rewrite_rules avec le même regex dans l'emplacement actuel du tableau, mais ajoutez celles qui ne sont pas en conflit à la fin du tableau.

Votre meilleure option peut être de définir l'argument « réécrire » à false pour l'un des deux enregistrements et l'ajout de code distinct pour ajouter des manquants règles de réécriture nécessaires à la rewrite_rules_top.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top