我正在努力display a set of posts 包含缩略图、标题和内容/摘录。我不想显示没有用于显示/格式化目的的内容或缩略图的帖子,因为这只会显示在我的主页上。
这是一个live example 我希望它看起来像什么的工作版本。
我的问题是我有一些帖子only shortcodes (无真实内容)或just an image (页面上没有文本)。
我可以通过以下方法解决短代码问题:
$content = strip_shortcodes( get_post()->post_content );
if( \'\' !== $content )
然后,我尝试进一步删除上面只有图像而没有文本的帖子。就像这样:
$content = strip_shortcodes( get_post()->post_content );
$content = str_word_count( strip_tags( $content ) );
if( \'\' !== $content )
这似乎没有任何效果。帖子的显示方式与前一个示例相同。
我做错了什么,或者我应该如何做,有什么帮助吗?我如何检查帖子是否有实际内容,如文本/文字?
Here\'s my complete code below:
<?php
$args = new WP_Query(array(
\'posts_per_page\' => 5,
\'post__in\' => get_option( \'sticky_posts\') ,
\'meta_query\' => array(
array(
\'key\' => \'_thumbnail_id\',
\'compare\' => \'EXISTS\',
),
),
\'post_status\' => \'publish\',
\'orderby\' => \'post__in\',
\'post_type\' => array( \'post\' ),
\'ignore_sticky_posts\' => true,
));
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$content = strip_shortcodes( get_post()->post_content );
$content = str_word_count( strip_tags( $content ) );
if( \'\' !== $content && has_post_thumbnail() ): ?>
<article class="thumbnail item" itemscope="" itemtype="http://schema.org/CreativeWork">
<a class="blog-thumb-img" href="<?php the_permalink(); ?>" title="Read more">
<?php the_post_thumbnail(); ?>
</a>
<div class="caption pt30">
<h4 itemprop="headline">
<a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a>
</h4>
<p itemprop="text" class="flex-text text-muted"><?php the_excerpt();?></p>
</div>
</article>
<?php endif;
}
wp_reset_postdata();
}
?>
最合适的回答,由SO网友:birgire 整理而成
以下是一些注意事项:
怎么做有问题$args
定义如下:
$args = new WP_Query(array( ... ) );
$the_query = new WP_Query( $args );
即有两个
WP_Query
此处为实例,但
$args
必须是数组。
这部分看起来也有问题:
$content = str_word_count( strip_tags( $content ) );
if( \'\' !== $content )
请注意
str_word_count()
返回其他格式输入参数的数字或数组。
这里使用的是严格的空字符串比较。
您应该使用pre_get_posts
如果可能,请执行操作,而不是引入另一个辅助查询。
我可以看到这种方法的另一个可能的问题:如果查询只返回包含短代码或图像的帖子,那么就没有什么可显示的。
另一种方法可能是在保存帖子时自动存储该信息(例如,作为帖子元)。
如果您将其存储在post meta键下_wpse_searchable
然后可以调整元查询:
\'meta_query\' => [
\'relation\' => \'AND\',
[
\'key\' => \'_thumbnail_id\',
\'compare\' => \'EXISTS\',
],
[
\'key\' => \'_wpse_searchable\',
\'value\' => true
]
],
如果一篇文章不能“搜索”,下次我们更新它时,我们也可以自动删除该自定义字段。