我在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"
答案 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,而不是整个对象。从而简化了比较。
我希望这可以帮到你!