Почему get_posts () возвращает пустые данные? - PullRequest
0 голосов
/ 02 марта 2020

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

        $meta_query = array(
            'relation' => 'OR',
            array(
                'key'       => '_wpm_gtin_code',
                'compare'   => 'EXISTS'
            ),
            array(
                'key'       => '_product_code',
                'compare'   => 'EXISTS'
            )
        );
        $args = array(
            'meta_query' => $meta_query,
            'post_type' => 'product',
            'post_status' => 'publish'
            //'posts_per_page' => -1
        );
        error_log(print_r($args, true));
        $posts = get_posts( $args );
        error_log(print_r($posts, true));

, и я вижу в файле журнала

[02-Mar-2020 06:51:12 UTC] Array
(
    [meta_query] => Array
        (
            [relation] => OR
            [0] => Array
                (
                    [key] => _wpm_gtin_code
                    [compare] => EXISTS
                )

            [1] => Array
                (
                    [key] => _product_code
                    [compare] => EXISTS
                )

        )

    [post_type] => product
    [post_status] => publish
)

[02-Mar-2020 06:51:12 UTC] Array
(
)

Когда я выбираю данные вручную с помощью этого SQL запроса:

SELECT * FROM wp_posts
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
WHERE wp_posts.post_type = 'product' AND wp_posts.post_status = 'publish' AND
(wp_postmeta.meta_key = '_wpm_gtin_code' OR wp_postmeta.meta_key = '_product_code')

я получаю правильный результат двух строк. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Я погрузился в код WP и обнаружил, что запрос содержал tax_query, даже если я не передавал его в мой get_post() вызов. Поэтому я искал, где запрос был изменен, и обнаружил, что вся проблема была в плагине WooCommerceCategoryExcluder, который подключился к pre_get_posts, и добавил запрос таксономии к моим get_posts() аргументам.

Может быть, это исследование поможет кому-то другому пытаться решить подобную проблему.

0 голосов
/ 02 марта 2020
 $meta_query = array(
    'relation' => 'OR',
    array(
        'key' => '_wpm_gtin_code',
        'compare' => 'EXISTS',
        'value' => '' // This is ignored, but is necessary...
    ),
    array(
        'key' => '_product_code',
        'compare' => 'EXISTS',
        'value' => '' // This is ignored, but is necessary...
    )
);

$args = array(
    'meta_query' => $meta_query,
    'post_type' => 'product',
    'post_status' => 'publish',
    //'posts_per_page' => -1
);

попробуйте добавить 'value' => '' в массив ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...