@arkanzas75

Как правильно сделать счетчик постов на Wordpress?

Пытаюсь сделать счетчик записей, которые уже привязаны к определенному post_type. При этом используются кастомные поля.

<?php
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            $args = array(
                'posts_per_page' => 8,
                'order'   => 'DESC',
                'post_type'   => 'realtors',
                'paged'          => $paged,
            );
            $the_query = new WP_Query($args);
            
            if ($the_query->have_posts()) :
                while ($the_query->have_posts()) : $the_query->the_post(); 
                $agent_id = get_the_ID();
                $meta_query[] = array(
                    'key'		=> 'realtor-id',
                    'value'		=> $agent_id,
                    'compare'	=> '='
                    );
            
             $objcount = new WP_Query(array(
             'post_type' => array( 'apartment', 'exclusive-objects' ),
             'posts_per_page' => 999999,
             'meta_query' => $meta_query
             )); ?>
                    
        <p>К риелтору <?php the_title(); ?> привязано <?php echo $objcount->post_count; ?> объекта</p></div>

            <?php

                endwhile;
            endif;

            ?>
        <?php wp_reset_query(); ?>


Как я понимаю, при текущем расположении $meta_query наполняется при каждом обходе цикла и я получаю неверные данные. Если вынести $meta_query за пределы цикла, то в 'value' => $agent_id, не попадает ID поста и данных нет вовсе. Вообщем подскажите, как правильно расставить все по местам...
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
У вас явно где-то нарушена логика, не должно быть так много тяжелых запросов. В качестве промежуточного решения вы можете использовать get_posts(), чтобы не перезаписывать глобальную переменную $post и получать только id постов, чтобы сократить запрос:

$objcount = get_posts( array(
	'numberposts' => -1,
	'post_type' => array( 'apartment', 'exclusive-objects' ),
	'fields' => 'ids',
	'meta_query' => array(
		array(
			'key' => 'realtor-id',
			'value' => get_the_ID(),
			'compare'	=> '='
		)
	)
) );

echo count($objcount);


Но по хорошему вам нужно переписать ту часть, где добавляется объект, чтобы в мету риелтора сохранялись прикрепленные объекты
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы