Флажок Advanced Custom Fields (ACF) — повышение публикации до «главной новости»

Я использую плагин ACF, который потрясающий, но я борюсь с его функцией, а именно с флажком.

Я пытаюсь использовать флажок как средство продвижения сообщения в блоге в «главную историю».

Поэтому я установил флажок в поле ACF под названием «top_story», и если он отмечен, он должен продвигать сообщение, а если он не отмечен, то он не будет продвигать сообщение.

Теперь это работает, но я продолжаю получать следующее сообщение об ошибке всякий раз, когда в сообщении в блоге этот флажок не установлен.

Предупреждение: 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» не передается аргумент, и она падает?

Я просто собирался скрыть ошибки, поскольку, по сути, он все еще работает, но мне это неудобно, и я уверен, что мне нужно будет сделать это снова в будущем.

Спасибо за все ваше время и помощь заранее.


person Johnny    schedule 11.11.2013    source источник


Ответы (2)


Может быть так:

<?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
                ?>
person user3229455    schedule 23.01.2014

Похоже, здесь есть две вещи, с которыми вы можете столкнуться:

  • Если поле не установлено или не существует, get_field() вернет false.
  • Если ни один из параметров в поле флажка не отмечен, get_field() вернет пустую строку.

В любом случае у вас не будет массива для поиска с помощью in_array, и вы получите предупреждение, если попытаетесь.

Я бы попробовал это, следуя документации ACF. Вы также должны рассмотреть возможность использования поля True/False ACF, которое предназначено для такого рода вещей; Поле Флажок предназначено для нескольких флажков, из которых более одного может быть истинным.

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

?>

person Brooklyn Web Developers    schedule 17.06.2015