Как отображать записи пользовательского типа на странице таксономии в WordPress?
Я создал пользовательский тип записи и пользовательскую таксономию для этого типа, но столкнулся с проблемой — на страницах постоянных ссылок таксономии не отображается содержимое пользовательских записей, которые должны там быть. Однако, просматривая исходный код страницы, я вижу, что там есть div, который должен содержать контент записи.
Есть идеи, как заставить отображаться весь контент?
Редактирование: Для создания пользовательских типов записей и таксономий использовался плагин Custom Post Types UI.
Редактирование 2: Оказалось, что проблема была в теме Thesis. В настройках Design Options > Display Options > Archives было установлено значение "titles only", что предотвращало отображение содержимого записей.

Попробуйте добавить этот код в файл функций
add_filter( 'pre_get_posts', 'include_tax_posts' );
function include_tax_posts( $query ) {
if ( is_tax() && false == $query->query_vars['suppress_filters'] )
$query->set( 'post_type', array( 'post', 'page', 'ВАШ_ТИП_ЗАПИСИ' ) );
return $query;
}

нужно ли обновлять постоянные ссылки после активации вашего пользовательского типа записи? WordPress должен перезаписать постоянные ссылки. Также вы можете использовать функцию flush_rewrite_rules() при инициализации вашего пользовательского типа записи, подробнее об этом можно прочитать в этой статье http://wpengineer.com/2044/custom-post-type-and-permalink/

Я этого боялся. Есть ли программный способ сделать это, а не писать запрос для каждой записи в таксономии? Например, моя таксономия называется "types" (виды украшений), и у меня есть кольца, часы, браслеты и т.д. Потребуется ли мне условное выражение для каждого типа в моем functions.php с запросом для этого конкретного типа?

Хорошо, немного покопался, и похоже, что есть тикет для исправления этой проблемы в релизе 3.1. А пока вы можете попробовать использовать этот плагин: http://wordpress.org/extend/plugins/simple-custom-post-type-archives/
Другой вариант, поскольку используется Thesis, — это задействовать их API для пользовательских циклов и создать запрос, который будет выполняться на всех страницах, связанных с этой таксономией/типом записи.

Меня беспокоит этот пустой div. Это означает, что происходит цикл и возвращается запись, верно? Для каждой записи создаётся такой div с правильным id="post_id" и т.д.

Вот два тикета:
http://core.trac.wordpress.org/ticket/13818 http://core.trac.wordpress.org/ticket/13816
Там много дискуссий о том, как они будут обрабатываться.

Если бы это была проблема с WP, который не выводит пользовательские типы записей на страницах пользовательских таксономий, то вообще не было бы никакого div с id записи - у вас просто отсутствует содержимое записей, в то время как WP ведет себя так, как будто у него есть записи для отображения на странице пользовательской таксономии...

Не знаю, поможет ли это вам, но выглядит, будто вы используете плагин для создания пользовательских типов записей и таксономий (у меня с ними не особо получалось). Вот что сделал мой разработчик, чтобы записи из пользовательской таксономии отображались на странице пользовательского типа записи при совпадении слагов. Похоже на то, что вам нужно, но технически наоборот...
В файле Functions.php...
Создаем связь между пользовательским типом записи и таксономией
global $post_tax;
$post_tax = array(
'store' => array('post' => 'stores', 'tax' => 'store'),
'state' => array('post' => 'states', 'tax' => 'state')
);
Регистрируем типы записей
function post_types_custom_init() {
global $post_tax;
register_post_type($post_tax['store']['post'], array('label' => 'Магазины','public' => true,'show_ui' => true,'_builtin' => false, 'capability_type' => 'post','hierarchical' => true,'rewrite' => array('slug' => 'stores'),'query_var' => true,'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes')) );
register_post_type($post_tax['state']['post'], array('label' => 'Штаты','public' => true,'show_ui' => true,'_builtin' => false, 'capability_type' => 'post','hierarchical' => true,'rewrite' => array('slug' => 'states'),'query_var' => true,'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes')) );
}
Добавляем хук на действие init и вызываем create_post_type_taxonomies при его срабатывании
add_action( 'init', 'create_beer_taxonomies', 0 );
Создаем таксономии для соответствующих типов записей
function create_beer_taxonomies()
{
global $post_tax;
// Добавляем новую таксономию
$labels = array(
'name' => _x( 'Магазины', 'общее название таксономии' ),
'singular_name' => _x( 'Магазин', 'единственное название таксономии' ),
'search_items' => __( 'Искать магазины' ),
'all_items' => __( 'Все магазины' ),
'parent_item' => __( 'Родительский магазин' ),
'parent_item_colon' => __( 'Родительский магазин:' ),
'edit_item' => __( 'Редактировать магазин' ),
'update_item' => __( 'Обновить магазин' ),
'add_new_item' => __( 'Добавить новый магазин' ),
'new_item_name' => __( 'Название нового магазина' ),
);
// Делаем иерархической (как категории) и привязываем к определенным типам записей
register_taxonomy($post_tax['store']['tax'],
array('post',$post_tax['review']['post']),
array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'stores-bp' ),
));
$labels = array(
'name' => _x( 'Штаты', 'общее название таксономии' ),
'singular_name' => _x( 'Штат', 'единственное название таксономии' ),
'search_items' => __( 'Искать штаты' ),
'all_items' => __( 'Все штаты' ),
'parent_item' => __( 'Родительский штат' ),
'parent_item_colon' => __( 'Родительский штат:' ),
'edit_item' => __( 'Редактировать штат' ),
'update_item' => __( 'Обновить штат' ),
'add_new_item' => __( 'Добавить новый штат' ),
'new_item_name' => __( 'Название нового штата' ),
);
register_taxonomy($post_tax['state']['tax'],
array('post',$post_tax['beer']['review']),
array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'states-bp' ),
));
}
В шаблоне/цикле
function meta_loop_beers($queried_tax,$queried_term){
//$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$queried_page = get_query_var('paged');
$paged = $queried_page ? $queried_page : 1;
$post_type = '';
global $post_tax;
foreach($post_tax as $relation){
if( $relation['tax'] == $queried_tax ){
$post_type = $relation['post'];
break;
}
}
$args=array(
'post_type' => 'post',
$queried_tax => $queried_term,
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts'=> 1
);
$my_query = null;
$my_query = new WP_Query($args);
<ПОМЕСТИТЕ ЦИКЛ(Ы) ЗДЕСЬ>
wp_reset_query();
}
Думаю*, это все. Вы не сможете просто скопировать этот код и заставить его автоматически работать у вас, но, надеюсь, это даст вам представление о том, как добиться нужного результата. На тот момент это были передовые технологии, реализованные около 6 месяцев назад, и я предполагаю, что где-то есть более удачная реализация. К сожалению, сайт до сих пор не запущен, так что показать нечего.
Нам также пришлось перенаправлять (через htaccess) слаги для таксономий, так как мы хотели, чтобы те, кто ищет магазин (тип записи) и архив магазинов (таксономия), попадали на одну и ту же страницу, где "профильная страница" магазина отображала и то, и другое.
В итоге архивная страница domain.com/stores-bp/walmart перенаправляется на domain.com/stores/walmart.
Слишком запутанно! Постараюсь уточнить, если потребуется.
