Как отображать записи пользовательского типа на странице таксономии в WordPress?

16 нояб. 2010 г., 23:42:49
Просмотры: 1.06K
Голосов: 0

Я создал пользовательский тип записи и пользовательскую таксономию для этого типа, но столкнулся с проблемой — на страницах постоянных ссылок таксономии не отображается содержимое пользовательских записей, которые должны там быть. Однако, просматривая исходный код страницы, я вижу, что там есть div, который должен содержать контент записи.

Есть идеи, как заставить отображаться весь контент?

Редактирование: Для создания пользовательских типов записей и таксономий использовался плагин Custom Post Types UI.

Редактирование 2: Оказалось, что проблема была в теме Thesis. В настройках Design Options > Display Options > Archives было установлено значение "titles only", что предотвращало отображение содержимого записей.

6
Комментарии

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

hakre hakre
21 нояб. 2010 г. 23:20:30

Согласен с hakre. Похоже, это больше связано с тегами шаблонов WordPress, чем с пользовательскими типами записей и таксономиями.

Denis de Bernardy Denis de Bernardy
22 нояб. 2010 г. 00:35:03

Хорошее замечание - я указал в первом сообщении, что использовал плагин.

Travis Northcutt Travis Northcutt
22 нояб. 2010 г. 03:44:45

Для плагинов, помимо их названия, оставьте ссылку, чтобы было понятно, о каком именно идёт речь. На случай совпадения названий. Плагинов так много, что лучше перестраховаться — и для себя, и для тех, кто отвечает.

hakre hakre
22 нояб. 2010 г. 04:01:16

@tnorthcutt: К вашему сведению, когда я зашёл на сайт с мобильного браузера, пост "test ring" был виден. Так что я не думаю, что проблема в запросе. Я не вижу ничего связанного с шаблонами в коде плагина Custom Post Type UI, так что не могли бы вы предоставить список ваших файлов шаблонов и код наиболее релевантного?

Jan Fabry Jan Fabry
22 нояб. 2010 г. 06:37:05

Я уже некоторое время успешно делаю именно это на установке 3.0.1 — отображаю контент пользовательского типа записей на странице пользовательской таксономии (без необходимости в пользовательских запросах или специальном шаблоне taxonomy.php). Судя по описанию автора, это не проблема функциональности WP, а баг в данном конкретном случае.

somatic somatic
25 нояб. 2010 г. 09:55:53
Показать остальные 1 комментариев
Все ответы на вопрос 4
1

Попробуйте добавить этот код в файл функций

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;
}
17 нояб. 2010 г. 08:24:58
Комментарии

Не выходит. Это тема Thesis, если это важно. Я действительно убедился, что указал правильный тип записи — сначала он был неверным, но это убрало div, где должен быть контент. Я установил правильный тип, и div всё ещё на месте, но контента по-прежнему нет.

Travis Northcutt Travis Northcutt
17 нояб. 2010 г. 15:47:38
3

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

17 нояб. 2010 г. 00:19:02
Комментарии

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

bueltge bueltge
17 нояб. 2010 г. 01:03:54

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

Travis Northcutt Travis Northcutt
17 нояб. 2010 г. 04:05:17

В будущем, пожалуйста, редактируйте ваш предыдущий ответ, чтобы добавить обновленную информацию, а не создавать новый ответ!

EAMann EAMann
22 нояб. 2010 г. 14:59:24
4

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

Другой вариант, поскольку используется Thesis, — это задействовать их API для пользовательских циклов и создать запрос, который будет выполняться на всех страницах, связанных с этой таксономией/типом записи.

21 нояб. 2010 г. 22:50:52
Комментарии

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

Travis Northcutt Travis Northcutt
22 нояб. 2010 г. 04:53:38

@Norcross: Не могли бы вы дать ссылку на тикет в trac?

t31os t31os
22 нояб. 2010 г. 08:37:08

Вот два тикета:

http://core.trac.wordpress.org/ticket/13818 http://core.trac.wordpress.org/ticket/13816

Там много дискуссий о том, как они будут обрабатываться.

Norcross Norcross
23 нояб. 2010 г. 07:38:31

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

somatic somatic
25 нояб. 2010 г. 09:56:46
0

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

В файле 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.

Слишком запутанно! Постараюсь уточнить, если потребуется.

25 нояб. 2010 г. 15:32:16