用摘录代替内容吗?

时间:2011-07-12 作者:Sampson

短而甜—我想发表一篇文章的摘录来代替the_content 在某些页面上。当然,如果没有摘录,就会从内容中生成一个摘录。我知道我可以直接进去编辑主题文件,但我想要一种侵入性较小的方法。

看看下面的工作原理:

add_action( \'the_content\', \'myFunc\' );
function myFunc ( $content ) {
  the_title();
}
我想我会试试这个

add_action( \'the_content\', \'myFunc\' );
function myFunc ( $content ) {
  the_excerpt();
}
这个。失败。光荣地。实际上,这会导致致命错误:

致命错误:已达到最大函数嵌套级别“100”,正在中止!在C:\\WAMP\\WWW\\WORDPRESS\\WP-INCLUDES\\POST中。PHP在线555

接下来是一个巨大的调用堆栈,它似乎被设置为疯狂的递归调用。

Turning the Tables

所以这引起了我的好奇,我尝试了相反的方法。传送the_content 代替the_excerpt:

add_action( \'the_excerpt\', \'myFunc\' );
function myFunc ( $content ) {
  the_content();
}
令我惊讶的是,这一切都很好。所以我想说的是the_excerpt 呼叫the_content, 但是the_content 不打电话the_excerpt - 这当然可以解释这样一个事实,即它是以一种方式工作的,但另一种方式似乎是以大量的递归方式启动的。

由于不太熟悉这两个函数的内部工作原理,我很好奇这里的社区能提供什么样的见解。上钩有什么问题the_content 和呼叫the_excerpt?

如果不是通过调用the_content 直接地我知道我可以提供自己的自定义摘录逻辑,但这将使我的站点中的摘录逻辑非规范化,这意味着我将通过函数中的自定义代码创建一些摘录。php和其他通过WordPress内部方法创建的方法-理想情况下,我会避免这种情况,如果可能的话,只使用内部方法。

2 个回复
SO网友:Webmaster G

都是很好的例子。但他们并没有为我的主题(钉板)和插件(辅助html内容)以及我想做的事情提供帮助。

第一个挑战是确保我获得两个内容,而不是一个。第二个挑战是用实际内容替换主页上的摘录。

因此,我创建了一个新插件,它可以做到这一点:

function okmAddingContentExcerpt() {
    global $post;
    $content = \'<div class="comment-first">\'.$post->post_content.\'</div>\';
    // Adia Review is the name of the label from secondary-html-content plugin
    $content .= \'<div class="comment-second">\'.get_secondary_content(\'Adia Review\',$post->ID).\'</div>\';
    return $content;
}
add_filter(\'the_excerpt\', \'okmAddingContentExcerpt\');

function okmAddingContentSingle() {
    global $post;
    $content = \'<div class="comment-first">\'.$post->post_content.\'</div>\';
    // remove the filter so that it doesn\'t loop over and over
    remove_filter(\'the_content\',\'okmAddingContentSingle\');
    $content .= \'<div class="comment-second">\'.get_secondary_content(\'Adia Review\',$post->ID).\'</div>\';
    return $content;
}
add_filter(\'the_content\', \'okmAddingContentSingle\');
请注意,我想在主页上保留内容而不是摘录。

哦,是的,如果你想下载插件,我将其添加到我的博客网站:http://okmaya.com/wordpress-plugin-for-pinboard-theme-and-secondary-html-content-plugin/

SO网友:Chip Bennett

事实上the_excerpt() 呼叫get_the_excerpt(), 哪些输出$post->post_excerpt.

还有一件事:你不应该使用add_filter() 而不是add_action()?

为什么要使用the_excerpt()/the_content()/the_title(), 而不是设置$content = get_the_excerpt() 等,然后返回$content? e、 g.这:

add_filter( \'the_content\', \'myFunc\' );
function myFunc ( $content ) {
  the_excerpt();
}
。。。通常写为:

add_filter( \'the_content\', \'myFunc\' );
function myFunc ( $content ) {
  $content = get_the_excerpt();
  return $content;
}
不确定这是否能解决递归循环的问题。。。

EDIT

你最后的评论给了我一个想法:为什么不直接传递$内容呢wp_trim_excerpt() 那就完了?

add_filter( \'the_content\', \'myFunc\' );
function myFunc( $content ) {
    $excerpt = wp_trim_excerpt( $content );
    return $excerpt;
}

EDIT 2

好了,我现在同意你了。我们推出自己的摘录功能怎么样?

add_filter( \'the_content\', \'myFunc\' );
function myFunc( $content ) {
    $text = strip_shortcodes( $content );
    $text = str_replace(\']]>\', \']]&gt;\', $text);
    $text = strip_tags($text);
    $excerpt_length = apply_filters(\'excerpt_length\', 55);
    $excerpt_more = apply_filters(\'excerpt_more\', \' \' . \'[...]\');
    $words = preg_split("/[\\n\\r\\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
    if ( count($words) > $excerpt_length ) {
         array_pop($words);
         $text = implode(\' \', $words);
         $text = $text . $excerpt_more;
     } else {
         $text = implode(\' \', $words);
     }        
     return $text;
}

结束

相关推荐

使用_excerpt(),有些帖子会被截断,有些则不会

我有一个模板,可以拉动三个帖子query\\u posts()循环。其中两篇帖子被截断为10个单词,就像我在过滤器中设置的一样。第三个决定忽略过滤器,吐出33个单词。我看不出这些帖子之间有什么区别。有人知道为什么会这样吗?while (have_posts()) : the_post(); $img = get_post_meta($post->ID, \'Featured Thumbnail\', true); ?> &