если пост имеет содержимое

6 нояб. 2013 г., 02:50:05
Просмотры: 59.7K
Голосов: 12

Я настраиваю одностраничный сайт на 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

0
Все ответы на вопрос 4
0
24

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

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

if( '' !== get_post()->post_content ) {
// сделать что-то
}
6 нояб. 2013 г. 03:03:26
3

Что насчёт

if ( !empty( get_the_content() ) ){ 
//код 
}
10 сент. 2017 г. 19:18:33
Комментарии

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

Johansson Johansson
10 сент. 2017 г. 23:14:57

У меня это работает! Вы уверены? По крайней мере в PHP 7

Juan Solano Juan Solano
11 сент. 2017 г. 11:04:20

@Johansson Не уверен, откуда вы это взяли или может я что-то упускаю, но конечно же можно, потому что get_the_content() возвращает строку, которая может быть пустой или нет. Не путать с the_content(), которая выводит строку.

Gerard Reches Gerard Reches
3 апр. 2024 г. 11:22:11
5

Я несколько раз реализовывал методы "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 } ?>
11 июл. 2019 г. 11:23:11
Комментарии

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

Thomas Fellinger Thomas Fellinger
10 мар. 2020 г. 09:59:59

третий раз здесь

Thomas Fellinger Thomas Fellinger
19 авг. 2020 г. 08:52:43

4-й раз, сейчас 2020 год

Thomas Fellinger Thomas Fellinger
18 окт. 2020 г. 13:28:40

5-е место в 2021 году — похоже, раз в год

Thomas Fellinger Thomas Fellinger
23 мар. 2021 г. 17:45:58

6-е место снова в 2021...

Thomas Fellinger Thomas Fellinger
26 нояб. 2021 г. 11:03:05
0

Это также работает и проверяет такие вещи, как пустые теги параграфов или &nbsp; в содержимом, которые могут привести к сбою обычной проверки. Оригинальная идея описана http://blog.room34.com/archives/5360 — я просто записываю это здесь, чтобы найти снова. :O)

Добавьте это в ваш functions.php:

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

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

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

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

1 дек. 2015 г. 18:33:31