通过元值获取帖子


27

我想列出所有键为cp_annonceur带有value的帖子professionnel


8
请注意,在发布问题之前您应该已经研究了该问题并尝试解决该问题。如果您不是这里的新手,我可能会否决这个问题,然后继续前进,而不是回答它。本着“ Welcome to the Stack”的精神,这是您的自由蜂。请看看如何问以后的问题。
s_ha_dum 2014年

由于以下未接受的回答,这只是让我浪费了一些时间。所以我要把我的两分钱留在这里。他从未回答,也没有接受下面的答案。当这里有许多类似的问题时,为什么不删除这些问题呢?
mircobabini

Answers:


47

您要的是 meta_query

$args = array(
   'meta_query' => array(
       array(
           'key' => 'cp_annonceur',
           'value' => 'professionnel',
           'compare' => '=',
       )
   )
);
$query = new WP_Query($args);

您需要的所有信息都在Codex中


3
@Beginner:如果此方法解决了问题,请将其标记为“已接受”。在左侧的投票箭头附近寻找对勾标记。
s_ha_dum 2014年

8

有两种方法可以做到这一点:

  1. 拦截以下主要查询pre_get_posts

    add_action( 'pre_get_posts', function( $query )
    {
        // only handle the main query
        if ( ! $query->is_main_query() )
            return;
    
        $query->set( 'meta_key',   'cp_annonceur' );
        $query->set( 'meta_value', 'professionnel' );
    } );
  2. 添加其他查询

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );

2
很高兴知道get_posts()的简短方法
Andrew Welch

8

我使用了自定义选择(可能会有更好的性能)

$posts = $wpdb->get_results("SELECT * FROM $wpdb->postmeta
WHERE meta_key = 'cp_annonceur' AND  meta_value = 'professionnel' LIMIT 1", ARRAY_A);

灵感来自https://tommcfarlin.com/get-post-id-by-meta-value/


1
它可能具有更好的性能,但是却放弃了使用Wordpress函数搜索(和缓存)数据的整个想法。而且,如果WP决定更改表结构,将会发生什么?:)
Erenor Paz

2

我们可以通过WordPress的Meta查询获得所需的结果:

// the meta_key 'diplay_on_homepage' with the meta_value 'true'
$cc_args = array(
    'posts_per_page'   => -1,
    'post_type'        => 'post',
    'meta_key'         => 'cp_annonceur',
    'meta_value'       => 'professionnel'
);
$cc_query = new WP_Query( $cc_args );

有关元查询的更多详细指南,请访问此博客:http : //www.codecanal.com/get-posts-meta-values/


我可以知道为什么这个post_per_page值为-1吗?
Abhay Gawade

1
@AbhayGawade您可以使用该参数限制最大结果数,-1表示没有限制。
库什(Kush)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.