高级自定义字段(ACF)复选框 - 将帖子推广到“头条新闻”

时间:2013-11-11 12:24:58

标签: wordpress advanced-custom-fields

我正在使用ACF插件很棒,但我正在努力解决它的一个功能,即复选框。

我正在尝试使用此复选框作为将博客帖子推广到“头条新闻”的方法。

所以我设置了一个名为'top_story'的ACF复选框字段,如果选中它,则应该提升帖子,如果没有选中,则不会宣传帖子。

现在这确实有效,但每当博客文章没有勾选该复选框时,我都会收到以下错误消息。

警告:in_array()[function.in-array]:第二个参数的数据类型错误

我简化了代码,所以它看起来像这样:

<?php
if( in_array( 'topstory', get_field('top_story') ) )
{
echo '<h1>This is a top story</h1>'; 
}
else
{
echo '<h1>This isn't a top story</h1>';
}
?>

所以我想我想知道的是这里出了什么问题以及如何纠正它?看起来因为数组中没有值不是'顶级故事'的帖子,那么没有参数传递到'get-field'函数并且它会失败?

我只是隐藏错误,因为它基本上仍然可以正常工作,但这对我来说并不合适,我相信我将来需要再次这样做。

提前感谢您的所有时间和帮助。

2 个答案:

答案 0 :(得分:0)

也许是这样的:

<?php
// args to check if "Top Story" os TRUE:
$args = array(
'cat'               => '5',             // Enter Category for "Topstories"
'posts_per_page'    => 3,               // How many posts to show if multiple selected "Backend"
'orderby'           => 'date',          // How to sort posts - date, rand etc...
'order'             => 'asc',           // How to order posts - ASC, desc etc...
'meta_key'          => 'topstory',      // Name of ACF field to filter through
'meta_value'        => 'yes'            // Yes = Show, No = Don't show
);
// The results:
$the_query = new WP_Query( $args );
// The Loop:
<?php if( $the_query->have_posts() ) :?>
<h1>This is a top story</h1>
<?php
while ( $the_query->have_posts() ) : $the_query-    >the_post(); ?>
    ....
  // Properties to show you post //
    ....            
            endwhile;
            endif;
            wp_reset_query();  // Reset/kill query
                ?>

答案 1 :(得分:0)

听起来你可能会碰到两件事:

  • 如果字段未设置或不存在,则get_field()将返回false。
  • 如果复选框字段中没有任何选项被选中,则get_field()将返回一个空字符串。

在任何一种情况下,您都没有使用in_array进行搜索的数组,如果您尝试,则会收到警告。

我在ACF's documentation之后试试这个。您还应该考虑使用ACF的True / False字段,这是专为此类事情而设计的;复选框字段更适用于多个复选框,其中多个复选框可以为真。

<?php
$topStory= get_field('top_story');
if($topStory) // Check whether this meta field exists at all
{
  if(is_array($topStory) && in_array( 'topstory',$topStory ) {
    echo "<h1>This is a top story</h1>"; 
  }
  else {
    echo "<h1>This isn't a top story</h1>";
  }
}
?>

如果你有a True/False field,你可以更简单一点:

<?php
    if(get_field('top_story')) {
      echo "<h1>This is a top story</h1>"; 
    } else {
      echo "<h1>This isn't a top story</h1>";
    }

&GT;