在wordpress中使用meta_query和default字段

时间:2015-01-28 10:43:07

标签: php mysql wordpress

我知道如何使用OR类在AND字段与meta_query之间添加关系default fieldWP_query

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

我在ORpost_title之间会有一个meta_query关系。

提前谢谢。

修改

    $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密钥不会改变任何内容。

1 个答案:

答案 0 :(得分:3)

meta_queryrelation值仅影响数据库中postmeta表中的数据。因此,您无法在OR中的元键(region)与postmeta表中的post_title之间进行元posts关系查询

解决方法是添加一个过滤器,将post_title镜像到postmeta表中,以便在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表中应该有一个具有键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' => '=='
         )
    )
));