Wordpress WP_Query Несколько запросов

Я пытаюсь найти способ запроса CPT от конкретного автора, но также, если у meta_key есть определенное значение.

Например, к моему CPT прикреплен идентификатор автора, а также настраиваемое поле "получатель". Что мне нужно, так это все сообщения этого типа этого автора, а также все сообщения этого типа, где "получатель" = этот автор.

(Надеюсь, я объяснил это достаточно хорошо!)

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

== Решено ==

Спасибо @3pepe3 за предложение параметра meta_query в WP_Query. Немного изменила мою логику CPT и теперь у меня прекрасно работает система.

Решением было добавить новое мета-поле для каждого поста, содержащего идентификатор пользователя исходного отправителя, а затем запустить два мета-запроса, чтобы получить посты, в которых текущий идентификатор_пользователя совпадает с полями отправителя или получателя, например:

$args = array(
    'post_type' => 'activity',
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'sender',
            'value' => $user_id,
            'type' => 'BINARY',
            'compare' => '='
        ),
        array(
            'key' => 'recipient',
            'value' => $user_id,
            'type' => 'BINARY',
            'compare' => '='
        )
    )
);

$query = new WP_Query( $args );

2 ответа

Решение

Helo JRM47R1X, вместо использования SQL-запросов вы должны использовать класс WP_Query

<?php
$args = array(
    'post_type' => 'activity',
    'author' => $user_id,
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'DESC',
    'meta_query' => array(
        array(
            'key' => 'recipient',
            'value' => $user_id,
            'type' => 'BINARY',
            'compare' => '='
            ),
        ),
    );
$query = new WP_Query($args);
?>

Преимущество использования WP_Query заключается в том, что вы можете смешивать мета-запросы, таксономии и даты с логическими операндами, такими как ИЛИ И МЕЖДУ....

Хорошо, я в конце концов понял это. Оказывается, все, что мне было нужно, - это объединение двух запросов:

SELECT * FROM (
    SELECT $wpdb->posts.* 
        FROM $wpdb->posts 
        WHERE $wpdb->posts.post_author = $user_id
        AND $wpdb->posts.post_type = 'activity'
        AND $wpdb->posts.post_status = 'publish'
    UNION
    SELECT $wpdb->posts.*
        FROM $wpdb->posts, $wpdb->postmeta
        WHERE $wpdb->postmeta.meta_key = 'recipient'
        AND $wpdb->postmeta.meta_value = $user_id
        AND $wpdb->posts.ID = $wpdb->postmeta.post_id
        AND $wpdb->posts.post_type = 'activity'
        AND $wpdb->posts.post_status = 'publish'
    ) as x
ORDER BY x.post_date DESC

Надеюсь, что это поможет кому-то еще с этой странной проблемой!

Другие вопросы по тегам