Проблемы, когда переписывают правила, сталкиваются?

Действительно ли это - проблема, чтобы иметь пользовательскую таксономию и пользовательское использование типа сообщения, то же переписывает структуру?

У меня есть пользовательская таксономия people и пользовательский тип сообщения people_bio. Идея состоит в том, что Вы получаете список сообщений о человеке с краткой биографией сверху страницы. Я комбинирую их в моем taxonomy-people.php шаблонный файл. Постоянная ссылка /people/[person-slug].

И пользовательская таксономия и пользовательский тип сообщения имеют rewrite набор аргумента к array('slug' => 'people'). Это, кажется, работает: get_term_link('seth-godin', 'people') возвраты /people/seth-godin/, и поскольку пользовательское сообщение вводят с кратким заголовком seth-godin, get_permalink() также возвраты /people/seth-godin/. Таксономия определяется сначала, и это, кажется, "побеждает": на a /people/[slug] страница, is_tax() верно, в то время как is_single() ложь.

Так, это работает, но я не чувствую себя довольным им. Действительно ли кто-то более опытен с переписать механизмом, и можно ли сказать мне, могло ли это повредить другие вещи?


Соответствующая часть сменного файла, призванного 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');

(Я всегда использую все параметры с register_*(), многие с их значениями по умолчанию, как дополнительная документация, пока Кодекс не актуален),


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();
?>

Обновление: сгенерированные переписывают правила

Вывод моего Переписывать Анализатор, кажется, говорит мне таксономию "победы" для регулярных страниц таксономии (который является тем, что я заметил), но пользовательский тип сообщения получает все другие URL (включая вторые страницы, подачу...). Это - то, что я боялся, и который я должен буду исследовать далее. Rewrite rules for people taxonomy and post type

3
13.04.2017, 15:37
3 ответа

Да, это даст проблемы. Эти четыре переписывают правила, которые сгенерированы пользовательской таксономией, также используются пользовательским типом сообщения. Тот, который Вы регистрируете сначала, перезаписывается тем, который Вы регистрируете после этого. В зависимости от точной конфигурации (иерархический по сравнению с неиерархическим) подобные правила могли бы закончиться в финале, переписывают список правил, но только первый "победит".

Это может иметь эффект это /people/seth-godin/ запросы для пользовательской таксономии, но /people/seth-godin/page/2/ запросы для пользовательского типа сообщения.

1
19.02.2020, 22:18

Вопрос: действительно ли это - проблема, чтобы иметь пользовательскую таксономию и пользовательское использование типа сообщения, то же переписывает структуру?

Ответ: да.

Если они совместно используют ту же самую структуру, то Вы получите состояние состязания, таким образом, один из тех не будет работать. Но я предполагаю, что Ваш сценарий автоматически не приводит к тому же, переписывают правила, поскольку эти две вещи по-другому снабжаются префиксом.

1
19.02.2020, 22:18
  • 1
    Можно ли развернуть этот ответ и дать ли определенные примеры того, что может пойти не так, как надо? –  Jan Fabry 09.11.2010, 22:29
  • 2
    я знаю одного из них, не будет работать, это не проблема, так как я комбинирую содержание обеих структур на одной шаблонной странице. Моя проблема - то, что я должен знать который шаблонная страница использовать: таксономия или пользовательский тип сообщения? Если переписать правила детерминированы, и я могу всегда предполагать, что "победы таксономии" или "отправляют победы типа", которые решили бы мой вопрос. Я обновил свой текст с изображением фактического, переписывают правила, который показывает, что это, кажется, смешанная ситуация. –  Jan Fabry 10.11.2010, 10:33
  • 3
    @Jan: А-ч хорошо, теперь я понимаю то, что Вы после. Я должен был бы проанализировать wp ядро для обнаружения. Но я так или иначе чувствую запах этого, это могло быть чем-то для повреждения, поскольку это - вид серой области и вероятно измениться. Вместо этого это мог бы быть лучший путь только для создания таксономии и шаблонов посттипа включая другой, и Вы установлены для любого случая как всегда, "правильный" шаблон загружается. Разве это не простой способ решить его? –  hakre 10.11.2010, 15:38
  • 4
    Действительно, я мог скопировать шаблонный файл, но Вы знаете, как similar-but-slightly-different файлы дают Вам головные боли, когда Вы исправляете ошибку в одной, но забываете другой... В моих поисках, чтобы понять WP_Rewrite (или умереть, пробуя), я, надо надеяться, узнаю как add_rewrite_tag() и add_permastruct() влияйте на получающиеся правила. –  Jan Fabry 10.11.2010, 15:52

Это происходит, потому что permastructure переписывают правила (который включает созданных путем регистрации post_types, и taxonomies) выполняются через array_merge (). array_merge заменит любой rewrite_rules тем же regex в текущем месте массива, но добавит любого, которые не конфликтуют в конец массива.

Ваш наилучший вариант может состоять в том, чтобы установить 'переписать' аргумент лжи для одной из этих двух регистрации и добавляющий отдельный код для добавления любых пропавших без вести, необходимых переписать правила к rewrite_rules_top.

1
19.02.2020, 22:18
  • 1
    Действительно, я подозревал, что слияние на основе regex произойдет. Я сконцентрируюсь на пути, который уезжает, например, people_bio из переписать правил, но позволяет этому работать с get_permalink(). Давайте посмотрим что это pre_post_link фильтр позволяет мне делать... –  Jan Fabry 10.11.2010, 16:41
  • 2
    Этот билет может относиться к Вам в реализации правильного решения: core.trac.wordpress.org/ticket/14991 –  prettyboymp 10.11.2010, 17:36

Теги

Похожие вопросы