Действительно ли это - проблема, чтобы иметь пользовательскую таксономию и пользовательское использование типа сообщения, то же переписывает структуру?
У меня есть пользовательская таксономия 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 (включая вторые страницы, подачу...). Это - то, что я боялся, и который я должен буду исследовать далее.
Да, это даст проблемы. Эти четыре переписывают правила, которые сгенерированы пользовательской таксономией, также используются пользовательским типом сообщения. Тот, который Вы регистрируете сначала, перезаписывается тем, который Вы регистрируете после этого. В зависимости от точной конфигурации (иерархический по сравнению с неиерархическим) подобные правила могли бы закончиться в финале, переписывают список правил, но только первый "победит".
Это может иметь эффект это /people/seth-godin/
запросы для пользовательской таксономии, но /people/seth-godin/page/2/
запросы для пользовательского типа сообщения.
Вопрос: действительно ли это - проблема, чтобы иметь пользовательскую таксономию и пользовательское использование типа сообщения, то же переписывает структуру?
Ответ: да.
Если они совместно используют ту же самую структуру, то Вы получите состояние состязания, таким образом, один из тех не будет работать. Но я предполагаю, что Ваш сценарий автоматически не приводит к тому же, переписывают правила, поскольку эти две вещи по-другому снабжаются префиксом.
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.
people_bio
из переписать правил, но позволяет этому работать с get_permalink()
. Давайте посмотрим что это pre_post_link
фильтр позволяет мне делать...
– Jan Fabry
10.11.2010, 16:41