Получить категорию и термины из результата wp_query в WordPress - PullRequest
0 голосов
/ 24 октября 2019

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

Но я не смогу понять, если это возможно, я прочиталдокументация и некоторые сообщения здесь о переполнении стека, но я не нашел никакого решения.

Мой код, чтобы найти что-то простое:

$args['post_type'] = $post_type;
$args['post_status'] = 'publish';
$args['posts_per_page'] = 14;
$args['paged'] = 1;
$args['s'] = 'something to search';

$query = new WP_Query($args);

Теперь мне нужно посчитать, сколько сообщенийпринадлежит к категории 1, или сколько принадлежит термину x.

Могу ли я получить эту информацию с помощью простого выбора?

Ответы [ 3 ]

0 голосов
/ 27 октября 2019

это решение - пожалуйста, настройте его

$args = [
   'post_type' => 'post',
   'posts_per_page' => -1
];

$results = new wp_query( $args );

$terms = [];

while( $results->have_posts() ){

    $results->the_post();
    $get_terms = get_the_terms( get_the_ID(), 'category' );
    foreach( $get_terms as $term ) { 
        $terms[] = $term->term_id; 
    }

}

$repeated_terms = array_count_values($terms);

print_r($repeated_terms);

//then get term's information from term's ids and show counts
0 голосов
/ 28 октября 2019

Я понял, что Wordpress не имеет хорошего решения без прерывания внутри цикла, поэтому я выбрал счетчик, например:

SELECT wp_terms.name, wp_terms.slug, wp_terms.term_id, Count(wp_terms.term_id) as count FROM wp_posts
INNER JOIN wp_term_taxonomy ON wp_term_taxonomy.taxonomy = 'category'
INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = wp_posts.ID AND wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
INNER JOIN wp_terms ON wp_terms.term_id = wp_term_taxonomy.term_id
INNER JOIN wp_postmeta ON meta_key = 'controledata' and wp_postmeta.post_id = wp_posts.ID
WHERE post_type = 'eventos' AND post_status = 'publish' AND count > 0 AND wp_terms.slug LIKE '%some_term%'
GROUP BY wp_terms.name, wp_terms.slug, wp_terms.term_id
Order by wp_terms.name asc

Итак, это не перегрузка сервера, но я 'Мне нужно два выбора, чтобы смонтировать эту страницу.

Спасибо за каждый ответ.

0 голосов
/ 25 октября 2019

Попробуйте:

Извлечено и адаптировано из: https://developer.wordpress.org/reference/classes/wp_query/

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'category', // get 'posts' only within this taxonomy (category)
            'field'    => 'slug', // get 'posts' by the slug field (can also be 'name')
            'terms'    => 'category1', //get 'posts' terms by the slug field named: 'category1' (or termX)
        ),
    ),
    's' => 'ferrari' // search on matching posts the keyword 'ferrari'
);
$query = new WP_Query( $args );
...