Модератор
Юрій
(@yube)
tax_query — массив массивов, а не простой плоский массив. Посмотрите примеры в документации.
Благодарю Юрий за Ваш ответ.
В итоге..
Чтобы получить только стандартные посты нужно исключить все остальные???
'terms' => array(
'post-format-aside',
'post-format-audio',
'post-format-chat',
'post-format-gallery',
'post-format-image',
'post-format-link',
'post-format-quote',
'post-format-status',
'post-format-video'
),
'operator' => 'NOT IN'
)
Модератор
Юрій
(@yube)
Разве я написал про исключить?
Смотрим пример в https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters и допиливаем запрос
$args = array(
'posts_per_page' => 10,
'post_type' => 'post',
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => ['post-format-standard']
),
),
);
$posts = new WP_Query($args);
Юрий, данная конструкция возвращает пустоту..
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => array(
'post-format-standard'
)
)
)
А если стандарт поменять на видео то работает!?
Модератор
Юрій
(@yube)
Я про синтаксис.
Что есть у Вас в базе и почему оно не выбирается, можно проверить припомощи плагина query monitor и инструмента phpmyadmin: находим запрос, копируем и выполняем его в pma; если результат не такой, как ожидается, смотрим, что можно изменить|удалить|добавить.
17 SELECT wp_posts.*
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = ‘mi13_glossary’
AND ((wp_posts.post_status = ‘publish’))
ORDER BY wp_posts.post_date DESC
WP_Query->get_posts()
Плагин: mi13-glossary 15 0,0000
18 SELECT post_id, meta_key, meta_value
FROM wp_postmeta
WHERE post_id IN (3264,3263,3262,3261,3260,3259,3257,3256,3255,3253,3252,3251,3250,3249,3248)
ORDER BY meta_id ASC
update_meta_cache()
Плагин: mi13-glossary 30 0,0000
19 SELECT t.*, tt.*
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy IN (‘post_format’)
AND t.slug IN (‘post-format-standard’)
WP_Term_Query->get_terms()
Плагин: mi13-glossary 0 0,0000
20 SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND ( 0 = 1 )
AND wp_posts.post_type = ‘post’
AND ((wp_posts.post_status = ‘publish’))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 10
MySQL вернула пустой результат (т.е. ноль строк). (Запрос занял 0,0100 сек.)
Модератор
Юрій
(@yube)
MySQL вернула пустой результат
Последний из списка? Потому что AND ( 0 = 1 )
. Надо разобраться, откуда оно берется.
По идее запрос должен выглядеть как-то так:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON ( wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (..тут список, вернувшийся от предыдущего запроса...) )
AND wp_posts.post_type = 'post'
AND (( wp_posts.post_status = 'publish' ))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 10
Кстати, чему равно $paged?
if (isset($page)) $paged = intval($page);
else $paged = (isset($_GET['n_page']) && intval($_GET['n_page'])>1) ? intval($_GET['n_page']) : 1;
Пагед выставил жестко в 1, тоже самое.
Тему поменял, все плагины выключил, тоже самое.
Даже интересно!
Если я кину ссылку на яндекс диск, Вы сможете у себя глянуть?
Модератор
Юрій
(@yube)
Вы сможете у себя глянуть?
Нет. Слишком трудоемко воссоздавать среду, а живых тестовых сайтов с форматами у меня нет ни одного.
Модератор
Юрій
(@yube)
Код, аналогиный
$args = array(
'posts_per_page' => 10,
'post_type' => 'post',
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'post_format',
'field' => 'slug',
'terms' => ['post-format-standard']
),
),
);
$posts = new WP_Query($args);
но с другим типом, другой таксономией и слагом терма отлично сработал. Только что проверил.
С другой термой и у меня работало.
Всё равно спасибо за участие )