在 wordpress 中使用 meta_query 和默认字段

Work with meta_query and default field in wordpress

我会知道如何使用 WP_query class 在 meta_query 字段和 default field 之间添加关系 ORAND .

$args = [
    'numberposts' => -1,
    'post_type' => 'post',
    'category_name' => 'job-offers',
    'meta_query' => [
        [
            'key' => 'region',
            'value' => $infos['region'],
            'compare' => '='
        ]
    ],
    'post_title' => $infos['title'],
];

在这里我会在 post_titlemeta_query 之间建立 OR 关系。

提前谢谢你。

编辑

    $args = [
    'numberposts' => -1,
    'post_type' => 'post',
    'category_name' => 'job-offers',
    'meta_query' => [
        [
            'key' => 'region',
            'value' => $infos['region'],
            'compare' => '='
        ]
    ],
    'post_title' => $infos['title'],
    'relation' => 'OR',
];

添加 relation 密钥不会改变任何内容。

meta_queryrelation 值仅影响数据库中 postmeta table 中的数据。因此,您不能在 postmeta 中的元键 (region) 和 posts 中的 post_title 之间执行元 OR 关系查询 table.

解决方法是添加一个过滤器,将 post_title 镜像到 postmeta table 中,以便在 meta_query.

中使用
add_action( 'save_post', function( $post_id ) {
    if ( $post_id && get_post_type( $post_id ) == 'post' ) {
        update_post_meta( $post_id, 'posts_title', get_the_title( $post_id ) );
    }
});

// This is a very light implementation. Be sure to do some
// checks in order to save the meta value only when really
// needed. This implementation might save it for auto-drafts
// and such.

现在 postmeta table 中应该有一个具有键 posts_title 的值。然后在 WP_Query 你可以做

$posts = new WP_Query( array(
    'post_type' => 'post',
    'category_name' => 'job-offers',
    'posts_per_page' => 1,
    'meta_query' => array(
        'relation' => 'OR',
         array(
             'key' => 'posts_title',
             'value' => $wanted_title_value,
             'compare' => '=='
         ),
         array(
             'key' => 'region',
             'value' => $wanted_region_value,
             'compare' => '=='
         )
    )
));