_excerpt-要修改受密码保护的输出

时间:2012-03-17 作者:cmegown

我希望在没有指定摘录并且帖子有密码保护的情况下修改\\u摘录的输出。我已经可以将受密码保护的表单修改为我想要的任何内容,但是\\u摘录输出“没有摘录,因为这是一篇受保护的帖子。”。

此代码位于wp includes/post模板中。php:

function get_the_excerpt( $deprecated = \'\' ) {
    if ( !empty( $deprecated ) )
        _deprecated_argument( __FUNCTION__, \'2.3\' );

    global $post;
    $output = $post->post_excerpt;
    if ( post_password_required($post) ) {
        $output = __(\'There is no excerpt because this is a protected post.\');
        return $output;
    }

    return apply_filters(\'get_the_excerpt\', $output);
}
一个简单的解决方案是简单地更改其中的代码,然后继续,但大家都知道,更改核心文件值得的不仅仅是一记耳光!有人能帮我弄清楚如何在函数中修改这段代码吗。php文件?

谢谢

EDIT: 下面是我试用过的代码,但它不起作用:(

add_filter(\'get_the_excerpt\', \'improved_get_the_excerpt\');
function improved_get_the_excerpt( $deprecated = \'\' ) {
    if ( !empty( $deprecated ) )
        _deprecated_argument( __FUNCTION__, \'2.3\' );

    global $post;
    $output = $post->post_excerpt;
    if ( post_password_required($post) ) {
        $output = __(\'This is some test content.\');
        return $output;
    }
}
我对过滤器、动作、挂钩等概念完全陌生,所以请耐心听我说!我感谢你的帮助!

3 个回复
最合适的回答,由SO网友:Rarst 整理而成

简单的方法是检查模板(或小包装)中的输出:

$excerpt = get_the_excerpt();

if( \'There is no excerpt because this is a protected post.\' == $excerpt ) {

    // stuff
}
else {

    echo $excerpt;
}
另一种方法是使用gettext 过滤器(内部使用__()) 捕捉并修改该短语。

SO网友:David

您需要查看add\\u filter()。

以下是指向它的codex链接:http://codex.wordpress.org/Function_Reference/add_filter

下面是我不时提到的另一篇文章:http://otto42.com/ak

-干杯

编辑:Passing a parameter to filter and action functions

SO网友:mor7ifer

get_the_excerpt() 不是可插拔函数,因此不能通过简单地命名与之相同的函数来覆盖它。因为在检查受保护状态和return对于无法显示摘录的文本,您必须进行一次筛选the_excerpt() 已使用@Rarst在其解决方案中建议的方法获得。

有一种(黑客)方法可以解决这个问题,您可以使用i18n功能来替换函数输出的文本,但这是一个糟糕的解决方案,因为它使用i18n功能的方式完全不是为了使用它们。

结束