если пост имеет контент


9

Я настраиваю одностраничный сайт WordPress. Я получаю некоторые страницы, перечисленные на моем сайте, которые не имеют контента. Например, я получу пустую страницу блога, а также шаблон блога. Поэтому я подумал, что могу добавить чек, чтобы увидеть, есть ли на странице контент, и пойдет ли он дальше и опубликовать эту информацию. У меня проблемы с тем, чтобы заставить его работать. Я использую пользовательский запрос для домашней страницы. Так что я думал, что смогу сделать это

 if ( $page_query->have_posts() ) : while ( $page_query->have_posts() ) : $page_query->the_post();
 if( $page_query->post_content != ''){
       get_template_part( 'content', get_post_format() );
 }
 endwhile; endif;

Проблема в том, что я получаю ошибку в этом коде, и я не могу понять, почему. Я получаю эту ошибку

Примечание: неопределенное свойство: WP_Query :: $ post_content в

Ответы:


14

Содержимое является свойством postобъекта, а не объекта запроса.

Используйте $postили get_post()вместо:

if( '' !== get_post()->post_content ) {
// do something
}

3

Что о

if ( !empty( get_the_content() ) ){ 
//code 
}

Вы не можете передать функцию empty()в качестве переменной. Сначала вы должны сохранить его в переменной. Даже тогда это не сработает, поскольку в вашем контенте могут быть пустые места.
Джек Йоханссон

1
Это работает для меня! ты уверен? По крайней мере, в PHP 7
Хуан Солано

2

Это также работает и проверяет такие вещи, как пустые теги абзаца или  содержимое, которые могут привести к сбою обычной проверки. См. Http://blog.room34.com/archives/5360 для оригинальной идеи - просто записать ее здесь, чтобы я мог найти ее снова. : О)

Поместите это в ваши functions.php:

function empty_content($str) {
    return trim(str_replace(' ','',strip_tags($str))) == '';
}

И поместите это туда, где вы хотите выполнить проверку:

if (function_exists('empty_content') && empty_content($post->post_content)) { ... }

Это вернется, trueесли содержимое пусто, falseесли нет.


1

Я реализовал несколько методов has_content () несколько раз за последние годы, и между ними всегда достаточно времени, поэтому мне нужно немного поискать, чтобы ответить на этот вопрос.

В любом случае - это мое решение, которое я хотел бы найти в следующий раз здесь - так что для справки.

все функции "внутри цикла" могут быть заменены пост-объектами "post_content"

в functions.php и аналогичных файлах:

// write inside the loop
$the_content = apply_filters('the_content', get_the_content());
if ( !empty($the_content) ) {
  echo $the_content;
}
// with post object by id
$post = get_post(12); // specific post
$the_content = apply_filters('the_content', $post->post_content);
if ( !empty($the_content) ) {
  echo $the_content;
}

как функция

// call inside the loop
function mytheme_has_content(){
  return !empty(apply_filters('the_content', get_the_content()));
}

Шаблон внутри цикла:

<?php if ( $customQuery->have_posts() ) {?>
  <?php while ( $customQuery->have_posts() ) {
    $customQuery->the_post(); ?>
    <?php $the_content = apply_filters('the_content', get_the_content()); ?>
    <!-- html -->
    <?php if ( !empty($the_content) ) { ?>
      <div class="content">
        <?php echo $the_content; ?>
      </div>
    <?php } ?>
  <?php } ?>
  <?php wp_reset_postdata(); ?>
<?php } ?>

это второй раз, когда я обращаюсь к этому, я оставляю один комментарий каждый раз, когда возвращаюсь для статистических целей
Томас Феллингер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.