если пост имеет содержимое
Я настраиваю одностраничный сайт на 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;
проблема в том, что я получаю ошибку в этом коде и не могу понять почему. Я получаю такую ошибку:
Notice: Undefined property: WP_Query::$post_content in

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

Я несколько раз реализовывал методы "has_content()" на протяжении лет, и всегда между реализациями проходит достаточно времени, чтобы снова нужно было искать ответ на этот вопрос.
В любом случае - вот мое решение, которое я хотел бы найти здесь в следующий раз - так что это для справки.
Все функции "внутри цикла" могут быть заменены свойством "post_content" объекта записи.
В файлах functions.php и подобных:
// внутри цикла
$the_content = apply_filters('the_content', get_the_content());
if ( !empty($the_content) ) {
echo $the_content;
}
// с объектом записи по ID
$post = get_post(12); // конкретная запись
$the_content = apply_filters('the_content', $post->post_content);
if ( !empty($the_content) ) {
echo $the_content;
}
В виде функции:
// вызов внутри цикла
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 } ?>

это уже второй раз, когда я обращаюсь с этим вопросом, теперь буду оставлять комментарий каждый раз для статистики

Это также работает и проверяет такие вещи, как пустые теги параграфов или
в содержимом, которые могут привести к сбою обычной проверки. Оригинальная идея описана http://blog.room34.com/archives/5360 — я просто записываю это здесь, чтобы найти снова. :O)
Добавьте это в ваш 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
— если нет.
