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


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

У меня есть код в function.php

    add_action( 'pre_get_posts', function ( $q ) {

    if( !is_admin() && $q->is_main_query() && $q->is_author() ) {

        $q->set( 'posts_per_page', 100 );
        $q->set( 'post_type', 'custom_feedback' );

    }

});

И на моей странице автора:

<div class="feedback-respond"> 
         <h3 class="feedback-title">User Feedback </h3>
             <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
               <?php the_content(); ?>
             <?php endwhile; else: ?>
               <p><?php _e('No posts by this author.'); ?></p>
             <?php endif; ?> 
            </div>

Код работает для всего профиля автора, но я не знаю, как заставить пользовательскую таксономию отображаться следующим образом:

Отзывы Пользователей

6 ПОЛОЖИТЕЛЬНАЯ обратная связь 4 ОТРИЦАТЕЛЬНАЯ обратная связь

Все отзывы идут сюда

Все обратная связь идет здесь

Все отзывы идут сюда

Кстати, это пользовательский тип записи (custom_feedback) и пользовательская таксономия (feedback_taxonomy) с двумя категориями Положительных и отрицательных.

Пожалуйста, помогите мастерам?

Author: rolex, 2015-06-28

1 answers

Ваш единственный способ добиться этого - выполнить два отдельных запроса и подсчитать сообщения, возвращенные из двух отдельных запросов. Для этого мы будем использовать get_posts, поскольку get_posts уже передает несколько важных значений по умолчанию WP_Query, чтобы сделать запрос более быстрым и ориентированным на производительность.

Мы добавим в запрос одну огромную экономию времени и ресурсов, 'fields' => 'ids'. Что это делает, так это то, что он извлекает только идентификаторы записей, а не полный объект записи. Это может сократить время выполнения запросов и запросов к БД на 99%, так что даже если вы собираетесь выполнить 2 отдельных запроса по всей базе данных, потеря производительности страницы будет незаметной.

Давайте поместим все в код ( Это входит в author.php , и обратите внимание, что этот код не проверен и нуждается, по крайней мере, в PHP 5.4+)

$author_id = get_queried_object_id(); // Gets the author id when viewing the author page

// Add our term slugs into an array. 
$terms = ['positive', 'negative']; // Just make sure these values are correct
$count = [];
foreach ( $terms as $term ) {
    // Build our query
    $args = [
        'nopaging' => true,
        'post_type' => 'custom_feedback',
        'author' => $author_id,
        'tax_query' => [
            [
                'taxonomy' => 'feedback_taxonomy',
                'field' => 'slug',
                'terms' => $term
            ],
        ],
        'fields' => 'ids'
    ];
    $q = get_posts( $args );

    // Count the amount of posts and add in array
    $count[$term] = count( $q );
}

// Display our text with post counts, just make sure your array keys correspond with your term slugs used
$positive = ( isset( $count['positive'] ) ) ? $count['positive'] : 0;
$negative =( isset( $count['negative'] ) ) ? $count['negative'] : 0;

echo $positive . ' POSITIVE feedback ' . $negative . ' NEGATIVE feedback';
 1
Author: Pieter Goosen, 2015-06-28 11:45:11