0

我正在使用很棒的 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”函数并且它失败了?

我只是想隐藏错误,因为它基本上仍然有效,但这让我感到不舒服,我相信我将来需要再次这样做。

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

4

2 回答 2

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
                ?>
于 2014-01-23T21:40:24.857 回答
0

听起来您可能会在这里遇到两件事:

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

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

我会按照ACF 的文档尝试这个。您还应该考虑使用 ACF 的 True/False 字段,该字段专为此类事情而设计;Checkbox 字段更多用于多个复选框,其中多个复选框可以为真。

<?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>";
  }
}
?>

如果你有一个 True/False 字段,你会让它更简单一点:

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

?>

于 2015-06-17T22:00:18.447 回答