WordPress как на ладони

Подсчет количества терминов таксономии для каждого поста

Подскажите, пожалуйста, у вас на сайте не нашел.

Имеется тип записи book, таксономия avtory.
У поста может быть как один, так и несколько авторов, а иногда и до десятка...
Как сделать в проверку в цикле, если у поста один автор - то выводим его имя, а если несколько, то имя первого и "и др.", а то весь дизайн летит из-за этого.

Большое спасибо!

0
Николай
3 года назад
  • 0

    В простом случае функция get_the_terms(), получающая все элементы таксономии, привязанные к посту, возвращает результат в виде массива. Поэтому с задачей подсчета количества справится PHP-функция count().

    $terms = get_the_terms( $post->ID, 'avtory' );
    
    if ( count( $terms ) == 1 ) {
    	echo $terms[0];
    }
    else {
    	echo $terms[0] . " и др.";
    } 
    
    Николай 3 года назад

    Функция не работает((

    Мне нужно её как-то вписать вот сюда

    <?php $array = array();$cur_terms = get_the_terms( $post->ID, 'avtory');
    foreach( $cur_terms as $cur_term ){
    	$array[] = $cur_term->name;
    }
    $comma_separated = implode(", ", $array);
    echo $comma_separated;?>
    Andrew 3 года назад

    функция вернет false, если не задана переменная $post (т.е. функция вызывается вне основного цикла) или нет привязанных элементов таксономии

    ID записи можно получить функцией get_the_ID()

    Николай 3 года назад

    Извините, пожалуйста, но я так и не понял, как это сделать?

    Andrew 3 года назад

    если функция вызывается вне основного цикла WordPress, то переменную, указывающую на ID нужной записи, можно получить функцией get_the_ID()

    т.е. вызов функции get_the_terms() будет выглядеть так:

    $post_id = get_the_ID();
    $terms = get_the_terms( $post_id, 'avtory');

    для описанного выше примера (формирования строки из имен элементов, разделенных запятой) лучше подойдет функция wp_get_post_terms, поскольку в ней есть возможность указать формат получения результатов.

    $post_id = get_the_ID();
    $terms = wp_get_post_terms( $post_id, 'avtory', array('fields' => 'names') ); 
    /* в массиве параметров можно указать - какие поля объекта включать в возвращаемый массив.
    В данном случае указано, чтобы в массив включались только названия элементов.  
    */
    echo implode(', ', $terms);
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация