如果帖子有内容


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

Answers:


14

内容是post对象的属性,而不是查询对象的属性。

使用$postget_post()代替:

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

3

关于什么

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

您不能将函数empty()作为变量传递。您必须首先将其存储在变量中。即使那样,它也不起作用,因为您的内容中可能会有一些空白。
杰克·约翰逊

1
这对我有用!你确定吗?至少在PHP 7中
Juan Solano

2

这也可行,并测试诸如空段落标签或 内容中可能导致正常检查失败的内容。原始想法请参见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则返回该值,否则为空。


1

几年来,我已经多次实现了一些“ has_content()”方法,并且两者之间总是有足够的时间,因此我需要再次搜索以回答这个问题。

无论如何-这是我的解决方案,我希望下次在这里找到-因此可供参考。

所有的“内部循环”功能都可以由post对象“ 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 } ?>

这是我第二次咨询此信息,我每次都会出于统计目的而再次发表评论
Thomas Fellinger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.