user
  • 0
Гуру

Как извлечь количество сообщений из определенной таксономии в пользовательском типе сообщений

  • 0

Интересно, может ли кто-нибудь помочь.

Я создаю сайт, на котором, среди прочего, публикуются музыкальные обзоры. Настройка построена на пользовательском типе сообщений и ряде связанных таксономий.

Тип поста:

  • my_albumreviews

Таксономии:

  • художник
  • этикетка
  • Дата выпуска

На странице, отображающей обзор альбома ( my_albumreviews тип сообщения), под основным содержанием мне нужен раздел, в котором отображаются «Другие обзоры от этого исполнителя». Я думаю, что я в правильном направлении с этим, но просто не могу заставить его работать.

$artistname = get_the_terms($post->ID, 'artist');
        $args = array(
        'post_type'=>'my_albumreviews',
        'tax_query'=>array(array('taxonomy'=>'artist',
                    'field'=>'id',
                    'terms'=> '$artistname'
                    ))
        );
$artist_reviews = new WP_query($args);

Затем следует..

while ($artist_reviews->have_posts()) : $artist_reviews->the_post();

..который ничего не возвращает на страницу.

Любая помощь приветствуется.

Share
  1. Что приходит после while ($artist_reviews->have_posts()) : $artist_reviews->the_post(); ?

    • 0
    • Я буду запускать стандартные встроенные функции, такие как the_title() отображение ключевой информации из всех других обзоров текущего исполнителя.

      • 0
    • Спасибо за быстрый ответ, Фредерик. К сожалению, похоже, это не работает. Я заменил $artistname недавно сохраненный $name в моем налоговом запросе, но он по-прежнему ничего не выводит на страницу, когда я вызываю the_title() . Я всегда буду получать только один результат в $artistname — имеет ли это значение? И я очень хочу остаться на таксономиях, так как их хранение поможет уменьшить количество ошибок, например, из-за орфографии. Битлз / Битлз. Спасибо еще раз.

      • 0
  2. get_the_terms() Возвращает список объектов терминов. Итак, прежде всего, вам нужно обрабатывать вывод как список, а не один элемент. Имя, которое вы ищете, хранится в name поле.

    $artistnames = get_the_terms($post->ID, 'artist');
    if (!empty($artistnames)) : ?>
        foreach ($artistnames as $obj) {
             $name = $obj->name;
             // Do something with the name
        }
    

    Может быть, вам следует использовать настраиваемое поле вместо таксономии? Мой опыт показывает, что они лучше работают для синглтонов.

    Вы получаете настраиваемые поля в цикле с помощью get_post_meta() :

    <?php $meta_values = get_post_meta($post->ID, 'artist', true); ?> 
    

    Надеюсь, это вам немного поможет!

    • 0
  3. При использовании 'tax_query' with 'field'=>'id' then terms должен быть массив идентификаторов терминов, поэтому вместо использования get_the_terms() используйте wp_get_object_terms() и установите для полей идентификаторы, таким образом, вы получите массив с идентификаторами терминов:

    $args = array('orderby' => 'name', 'order' => 'ASC', 'fields' => 'ids');
    $artistnames = wp_get_object_terms($post->ID, 'artist',$args);
    

    и вы должны быть установлены с помощью вашего кода.

    • 0
  4. $artists = get_the_terms($post->ID, 'artist');
    foreach ($artists as $artist) $artids[] = $artist->term_id;
    $args = array(
       'post_type'=>'my_albumreviews',
       'tax_query'=>array(
          array('taxonomy'=>'artist',
             'field'=>'id',
             'terms'=> $artids,
          )
       )
    );
    $artist_reviews = new WP_query($args);
    

    get_the_terms возвращает массив объектов. Поэтому вам нужно пройтись по нему и сохранить идентификационные номера в другой массив, чтобы передать их в tax_query.

    Также ‘$artistname’ является строкой ‘$artistname’. Если это переменная, она не должна заключаться в одинарные кавычки.

    • 0
  5. @Frederik, @Bainternet и Отто

    Спасибо за помощь ребята. Тысяча благодарностей за помощь! Ключ заключался в том, чтобы убрать слаг таксономии из файла wp_get_post_terms() .

    Вот мой окончательный, полностью функционирующий код:

    $artist_taxo = wp_get_post_terms( $post->ID, 'artist' );  //Fetch terms from taxonomy 'artist'
    $artistname = $artistslug[0]->slug;  //Pull slug from $artist_taxo into $artistname
    
    $args = array(
        'post_type' => 'cdx_albumreviews',  //Specify custom post name
        'numberposts' => -1,  //Return all posts
        'artist' => $artistname //Taxo 'artist' is equal to $artistname
        );
    
        $artist_reviews = new wp_query($args);
        while ($artist_reviews->have_posts()) : $artist_reviews->the_post();
        the_title();
        endwhile;
    

    Огромное спасибо.

    Мэтью

    • 0

Оставить ответ

You must login to add an answer.