Bottom for resolution我想我快疯了。我一辈子都搞不懂这件事。我有一个高级自定义字段,它是一个选择框。选择框有多个值,允许进行多个选择。我在这个下拉列表中发表了1篇文章,并选择了3个值。
我现在需要能够显示所有具有其中一个值的帖子。所以我创建了一个新页面,并开始在谷歌上搜索代码来实现这一点,我尝试了很多方法,但似乎都没有奏效。现在,如果我将此ACF更改为单选,我可以做得很好。但由于它是这个多选序列化数组,所以我无法理解其语法。
目前,我的带有以下代码的页面返回了许多帖子标题,包括我想要的,但也包括一些我不想要的。
关键词:使用高级自定义字段(数组)创建页面以查询帖子,查询acf字段数组
acf meta_key = author_link
meta_value in db = a:3:{i:0;s:12:"Triz-Journal";i:1;s:18:"Matt Campbelll III";i:2;s:8:"Garfield";}
我应该能够返回我的1篇文章的标题,其中包含这3个值中的1个。我永远不会搜索超过1个值。
这是我目前正在使用的代码,但我也尝试了许多其他代码
// args
$args = array(
\'numberposts\' => -1,
\'post_type\' => \'post\',
\'meta_query\' => array(
array(
\'key\' => \'author_link\',
\'value\' => $authorname,
)
)
);
// query
$the_query = new WP_Query( $args );
var_dump($the_query->request);
?>
<?php if( $the_query->have_posts() ): ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<p>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</p>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); // Restore global post data stomped by the_post(). ?>
VAR\\u转储查询结果
string(408) "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_postmeta.meta_key = \'author_link\' AND
CAST(wp_postmeta.meta_value AS CHAR) = \'Garfield\' ) ) AND
wp_posts.post_type = \'post\' AND (wp_posts.post_status = \'publish\' OR
wp_posts.post_status = \'private\')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 20"
目前,查询返回了许多帖子标题,但并不是唯一一篇实际包含acf值“Garfield”的帖子。
有人能进一步帮助吗?
RESOLUTION----------不管出于什么原因,这个查询会撤回多篇帖子,包括我需要的帖子。多亏了那些回应的人,我才明白了这一点。在查询循环中,我使用get字段测试循环中每个帖子的数组。然后,我只回显标题,如果它有一个匹配我需要的元值(从URL获取)。
page-authors.php
//Get authorname from URL
<?php
if (isset($_GET[\'authorname\'])) {
$authorname = $_GET[\'authorname\'];
} else {
$authorname = \'none\';
}
?>
// meta query my acf field name called author_link
// which is a multi value array not a single text value.
// query it for the value from the url
$args = array(
\'numberposts\' => -1,
\'post_type\' => \'post\',
\'meta_query\' => array(
array(
\'key\' => \'author_link\',
\'value\' => \'"\' . $authorname . \'"\',
\'compare\' => \'LIKE\',
)
)
);
// query
$the_query = new WP_Query( $args );
?>
// loop through the query results and test
// them further for the meta value matching what came from the url.
// then echo the title if it matches
<?php if( $the_query->have_posts() ): ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<p>
<a href="<?php the_permalink(); ?>">
<?php if( in_array( $authorname, get_field(\'author_link\') ) )
{
echo the_title();
} ?>
</a>
</p>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_query(); // Restore global post data stomped by the_post(). ?>