Wordpress:带有自定义字段的meta_query(按子字段获取的帖子)(WP_QUERY)

时间:2015-02-09 11:06:41

标签: wordpress advanced-custom-fields

我在WP中创建了一个名为=' add_info'的自定义字段。 (类型=中继器) 该字段有一个名为comments的子字段(name = ai_comment,type = text)

我如何才能获得带评论的帖子!= NULL / EMPTY?

$args = array(
            'post_type'         => 'cpt_articles', 
            'meta_query'        => array(
                                        array(
                                            'key'       => 'add_info_%_ai_comment', 
                                            'value'     => '""',
                                            'compare'   => '!='
                                        )
                                   ),
            'orderby'           => 'meta_value',
            'order'             => 'DESC',
            'posts_per_page'    => 10,
        );

我在这里找到的有点奇怪的解决方案(additional_tests _%_ acomment):http://www.advancedcustomfields.com/resources/how-to-query-posts-filtered-by-custom-field-values/#example-5

但不起作用......显示空

这是转储..

string(431) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND wp_posts.post_type = 'cpt_articles' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND ( ( wp_postmeta.meta_key = 'add_info_%_ai_comment' AND CAST(wp_postmeta.meta_value AS CHAR) != '\"\"' ) ) GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value DESC LIMIT 0, 10"

2 个答案:

答案 0 :(得分:0)

试试这个,我觉得应该可行:

$sql = "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID"
    . " FROM wp_posts"
    . " INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )"
    . " WHERE 1=1"
    . " AND wp_posts.post_type = 'cpt_articles'"
    . " AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')"
    . " AND ( ( wp_postmeta.meta_key LIKE 'add_info_%_ai_comment' AND wp_postmeta.meta_value IS NOT NULL AND wp_postmeta.meta_value != '')"
    . " GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value DESC LIMIT 0, 10";

您没有应用该过滤器,本教程中的内容。因此,wp_postmeta.meta_key =不会被wp_postmeta.meta_key LIKE取代,并且通配符不起作用。其次,检查我如何使用NOT NULL和字符串比较。

您不需要将字段转换为字符串,因为它已经是LONGTEXT字段。直接在MySql中试一试,并在评论中告诉我结果。 (当你想直接在mysql中使用它时,首先在PHP中回应它,在我的回答中这是一个PHP字符串)。

答案 1 :(得分:0)

在我使用的wordpress版本(4.9.4)中,ACF中的子字段在字段之间保存为“0”。我首先想到'%'也会捕获'0',但是从测试中我发现它(在我的情况下)没有。

所以我的情况是:

$args = array(
                        'post_type'     => 'trainingen',
                        'order'         => 'ASC',
                        'meta_query'    => array(
                                                'key' => 'data_en_tijden_0_locatie',
                                                'compare' => '=',
                                                'value' => '"'.get_the_ID().'"'
                                                )

如果这不起作用,您还可以使用自定义SQL查询,例如:

SELECT post_id FROM `wp_postmeta` p INNER JOIN wp_posts w on w.ID=p.meta_value WHERE meta_key="data_en_tijden_0_locatie" and w.ID="'.get_the_ID().'"

注意:我使用ACF关系字段,而不是post_object字段。可以将此字段配置为返回post_id,而不是整个对象。从而简化了比较。

我希望这可以帮到你!