Пользовательский шаблон не будет загружаться для пользовательского типа публикации (используются пользовательские постоянные ссылки)
Я создал пользовательскую таксономию для своих пользовательских типов записей.
function create_states_hierarchical_taxonomy() {
$labels = array(
'name' => _x( 'States', 'taxonomy general name' ),
'singular_name' => _x( 'State', 'taxonomy singular name' ),
'search_items' => __( 'Search States' ),
'all_items' => __( 'All States' ),
'parent_item' => __( 'Parent State' ),
'parent_item_colon' => __( 'Parent State:' ),
'edit_item' => __( 'Edit State' ),
'update_item' => __( 'Update State' ),
'add_new_item' => __( 'Add New State' ),
'new_item_name' => __( 'New State Name' ),
'menu_name' => __( 'States' ),
);
// Now register the taxonomy
register_taxonomy('states',array('post'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'states' ),
));
}
У меня есть 3 пользовательских типа сообщений. Они все похожи. Это один из них.
// Speech Language Pathologists custom post
function create_pathologists() {
$labels = array (
'name' => 'Pathologists',
'singular_name' => 'Pathologist',
'add_new' => 'Add SLP',
'all_items' => 'All SLPs',
'add_new_item' => 'Add SLP',
'edit_item' => 'Edit SLP',
'new_item' => 'New SLP',
'view_item' => 'View SLP',
'search_item' => 'Search SLPs',
'not_found' => 'No SLPs found',
'not_found_in_trash' => 'No SLPs found in trash',
'parent_item_colon' => 'Parent Item'
);
$args = array (
'labels' => $labels,
'public' => true,
'show_in_menu' => true,
'has_archive' => true,
'publicly_queryable' => true,
'query_var' => true,
'rewrite' => array(
'slug' => 'pathologists/%states%',
'with_front' => false,
),
'capability_type' => 'post',
'hierarchical' => false,
'supports' => array (
'title',
'editor',
'excerpt',
'thumbnail',
'revisions',
),
'taxonomies' => array ('states', 'post_tag'),
'exclude_from_search' => false
);
register_taxonomy_for_object_type( 'states', 'create_schools' );
register_taxonomy_for_object_type( 'post_tag', 'create_schools' );
register_post_type('pathologists', $args);
}
add_action( 'init', 'create_pathologists' );
Я фильтрую свою постоянную ссылку, чтобы она отображала имя таксономии после имени пользовательского типа записи и перед именем записи.
add_filter('post_type_link', 'pathologists_permalink_structure', 10, 4);
function pathologists_permalink_structure($post_link, $post, $leavename, $sample)
{
$post = get_post($id);
if ( false !== strpos( $post_link, '%states%' ) ) {
$state_term = get_the_terms( $post->ID, 'states' );
$post_link = str_replace( '%states%', array_pop( $state_term )->slug, $post_link );
}
return $post_link;
}
flush_rewrite_rules();
Так, например, у меня есть пост под названием "тест" в разделе "патологоанатомы" и категория "алабама". Постоянная ссылка будет выглядеть так это:
Http://sitename/pathologists/alabama/test/
Таким образом, я могу получить доступ к любой странице без каких-либо проблем, но когда дело доходит до отображения всех сообщений определенного пользовательского типа по состоянию, WP использует значение по умолчанию archive.php и отображает все записи определенного состояния из всех пользовательских типов записей.
Я изучил решение , представленное Питером Гусеном, но все, что я пытаюсь, не даст мне правильного результата.
Все возможные файлы, которые я пытался использовать:
- archive-pathologists.php
- states.php
- alabama.php
- states-alabama.php
- taxonomy-states.php
Taxonomy-states.php это самое близкое, что я мог сделать до сих пор. По крайней мере, он использует правильный шаблон. Но вместо того, чтобы показывать мне все сообщения о состоянии из одного пользовательского типа сообщения, он показывает мне 3 имени специалистов, которых я поместил в поле пользовательского сообщения для пользовательского плагина пользовательского интерфейса типа сообщения, который я пытался используется в первую очередь. Плагин удаляется со всеми сообщениями и типами.
Я также пытался использовать category_template, чтобы мой контент отображался на определенной странице, которую я хочу, но тоже безуспешно.
Я чувствую, что решение проблемы очень близко, но я больше не могу в этом разобраться.
Пожалуйста, помогите мне.
Живая версия проблемы находится здесь
1 answers
Проблема в вашем коде заключается в отсутствии надлежащих правил.
Вы добавляете 'rewrite' => 'CPT/%states%'
в register_post_type()
аргументы.
Это приводит к тому, что правила, созданные для типа записи pathologists
, начинаются с
pathologists/%states%/
и адрес pathologists/alabama/
(pathologists/{term}/
) не будут сопоставлены. Что еще более важно, все записи из пользовательской категории отображаются независимо от типа, потому что правила не устанавливают тип записи.
Здесь вы найдете аналогичный вопрос, единственное отличие заключается в порядке элементов, у вас есть {cpt}/{term}
, в вопросе заключается {term}/{ctp}
.
Приведенный ниже код добавит необходимые вам правила перезаписи. При добавлении или удалении термина таксономии states
правила должны быть восстановлены заново (используйте фильтры created_term
, delete_{$taxonomy}
).
add_action('init', 'se343186_rewrite_rules__states', 15);
function se343186_rewrite_rules__states()
{
$cpts = ['pathologists', 'other_cpt'];
$tax_slug = 'states';
foreach ($cpts as $cpt)
{
add_rewrite_rule( '^'. $cpt. '/([^/]+)(?:/(.+?))?/page/?([0-9]{1,})/?$',
'index.php?taxonomy='.$tax_slug.'&'.$tax_slug.'=$matches[1]&'.$cpt.'=$matches[2]&paged=$matches[3]&post_type='.$cpt,
'top'
);
add_rewrite_rule( '^'. $cpt. '/([^/]+)/(.+?)(?:/([0-9]+))?/?$',
'index.php?taxonomy='.$tax_slug.'&'.$tax_slug.'=$matches[1]&'.$cpt.'=$matches[2]&page=$matches[3]&post_type='.$cpt,
'top'
);
add_rewrite_rule( '^'. $cpt. '/([^/]+)(?:/([0-9]+))?/?$',
'index.php?taxonomy='.$tax_slug.'&'.$tax_slug.'=$matches[1]&paged=$matches[2]&post_type='.$cpt,
'top'
);
}
}