在wordpress上不同的摘录长度

时间:2014-06-27 20:48:21

标签: php wordpress

我想在我的wordpress插件上注册自定义长度的摘录。如果我在我的插件中添加自定义摘录长度,如果用户的主题有另一个自定义摘录长度,他们会发生冲突吗?我注意到fucntion名称会有所不同,但过滤器的标签会相同('excerpt_length')。 所以,请让我明白这一点。

这是我的摘录长度代码。

function custom_excerpt_length( $length ) {
    return 40;
}
add_filter( 'excerpt_length', 'custom_excerpt_length');

感谢。

2 个答案:

答案 0 :(得分:0)

我将其用于高度自定义的摘录输出(从Aaron Russell's code修改)。它不会与你拥有的任何东西发生冲突。您可以随意删除文本值。它基本上删除了摘录输出的所有过滤器并覆盖它们。

// better excerpt output
        function improved_trim_excerpt($text) {
        global $post;
        if ( '' == $text ) {
                $text = get_the_content('');
                $text = apply_filters('the_content', $text);
                $text = str_replace('\]\]\>', ']]>', $text);
                $text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text);
                $text = strip_tags($text, '<p>');
                $excerpt_length = 40;
                $words = explode(' ', $text, $excerpt_length + 1);
                if (count($words)> $excerpt_length) {
                        array_pop($words);
                        array_push($words, '... [<a href="' . get_permalink(). '" >Read More</a>]');
                        $text = implode(' ', $words);
                }
        }
        return $text;
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'improved_trim_excerpt');

答案 1 :(得分:0)

如果使用名为custom_excerpt_length()的函数,主题也是如此,那么您可能会对函数名称产生冲突,但不会调用add_filter()。要缓解前者,您可以使用取消注释前缀(例如myplugin_custom_excerpt_length())或者更好地使用类来保护名称空间,如$myplugin->custom_excerpt_length()

在WordPress中向操作/过滤器添加多个回调本身不会引起冲突。如果有多个操作/过滤器,则按优先级的顺序运行,这是这些功能的第三个参数。为了让你的过滤器钩子更好地运行 last 并因此使用该值,将其设置为高优先级(例如999) - 或者至少高于连接到你想要的过滤器的函数如果您只想设置其他内容,则覆盖或低于默认值10。您也可以使用同一个类添加其他操作/过滤器。

if ( ! class_exists( 'MyPlugin' ) ):
class MyPlugin(){

    private $priority = 999;
    private $excerpt_length = 40;

    function __construct(){
        // Use an array to pass $this and the function to add_filter()
        add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ) , $this->priority );
    }

    // The function name won't conflict since it is in the context of $this->excerpt_length()
    function custom_excerpt_length( $length ){
        return $this->excerpt_length;
    }
}
new MyPlugin();
endif; // class_exists()