这可能更像是一个php最佳实践问题,但接下来。。。
我正在使用自定义摘录修剪功能:
function new_wp_trim_excerpt($text) { // Fakes an excerpt if needed
global $post;
if ( \'\' == $text ) {
$text = get_the_content(\'\');
$text = apply_filters(\'the_content\', $text);
$text = str_replace(\']]>\', \']]>\', $text);
$text = strip_tags($text, \'<p>\');
$text = preg_replace(\'@<script[^>]*?>.*?</script>@si\', \'\', $text);
$excerpt_length = 100;
$words = explode(\' \', $text, $excerpt_length + 1);
if (count($words)> $excerpt_length) {
$dots = \'…\';
array_pop($words);
$text = implode(\' \', $words).$dots.\'<p class="moarplz"><a href="\'. get_permalink($post->ID) . \'">Read More »</a></p\';
}
else
{
$text = get_the_content();
}
}
return $text;
}
remove_filter(\'get_the_excerpt\', \'wp_trim_excerpt\');
add_filter(\'get_the_excerpt\', \'new_wp_trim_excerpt\');
基本上,对于超过100个单词的帖子,前100个单词会生成一个“伪造”的摘录,并带有“阅读更多”链接。少于100个单词的帖子将全部输出。您可以在此处看到这一点:
http://www.mbird.com/使事情复杂化的是1) 作者可以选择覆盖每篇文章的摘录。而且2) 如果未指定任何图像,则有一个函数可以尝试从帖子附件中查找可用作帖子缩略图的图像。
所有这些都可以作为标志,决定文章在索引页面上的布局。例如,如果输出一篇完整的文章,它需要有额外的填充以避免我使用的图像包裹CSS,并且它不应该有摘要缩略图。如果找不到摘录的摘要缩略图,则需要避免相同内容。等等等等。
无论如何,为了确定布局输出包装器应该是什么,我最终重用了很多new_wp_trim_excerpt
函数在我的页面模板中嗅探是否会出现摘录或全文。像这样:
<?php
while (have_posts ()) : the_post();
global $excerpt_checkbox_mb;
$exmeta = $excerpt_checkbox_mb->the_meta(); //override excerpt?
$text = get_the_content(\'\');
$text = apply_filters(\'the_content\', $text);
$text = str_replace(\']]>\', \']]>\', $text);
$text = strip_tags($text, \'<p>\');
$text = preg_replace(\'@<script[^>]*?>.*?</script>@si\', \'\', $text);
$excerpt_length = 100;
$words = explode(\' \', $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
$word_count = true;
} else {
$word_count = false;
}
?>
然后我用它来确定是否应该搜索图像:
<?php
if (($exmeta[\'cb_single\'] != "yes") && $word_count) { // we\'re printing an excerpt, get a teaser image!
get_the_image(array(
\'meta_key\' => null,
\'image_class\' => \'thumb\',
\'callback\' => \'find_image\'
));
}
?>
最后,包装应该是什么:
<?php $image = find_image(); ?>
<!--if full post, add left padding to avoid image wrap-->
<?php if (($exmeta[\'cb_single\'] == "yes") || !$word_count) : ?>
<div class="post-content">
<?php the_content();
elseif ($image) : ?> // we found an image, apply css psuedo-col
<div class="post-content post-psuedo-col">
<?php the_excerpt();
else : ?> // no image, reduce padding
<div class="post-content">
<?php the_excerpt();
endif; ?>
</div>
无论如何,重复使用这么多的
new_wp_trim_excerpt
用于嗅探的函数,尤其是因为我必须更改
$excerpt_length
在两个地方!但我真的想不出一个优雅的方式来重新考虑。我正在考虑添加另一个两部分都可以调用的函数,该函数将返回包含bool的数组
count($words) > $excerpt_length
也可以选择文本本身,但这看起来仍然很笨拙。
如果你不知何故读到了这一切,请帮帮我!