添加过滤器传递变量(PHP<5.3)

时间:2013-11-21 作者:Howdy_McGee

在PHP中使用匿名函数时<;5.3我收到以下错误:

Parse error: syntax error, unexpected T_FUNCTION

这对于add\\u过滤器尤其麻烦。例如,如果我想对自定义摘录进行筛选

The Function

function custom_excerpt($new_length = 20, $new_more = \'...\', $strip = false) {
    add_filter(\'excerpt_length\', function () use ($new_length) {
        return $new_length;
    }, 999);
    add_filter(\'excerpt_more\', function () use ($new_more) {
        return $new_more;
    });
    $output = get_the_excerpt();
    $output = apply_filters(\'wptexturize\', $output);
    $output = apply_filters(\'convert_chars\', $output);
    if(!$strip)
        $output = \'<p>\' . $output . \'</p>\';
    echo $output;
}
上述函数接受3个参数:lenth、read more和strip。你给这个函数一个新的长度,比如“30”,它会给我一个30个单词的帖子摘录。“阅读更多”将替换默认值[...] 使用默认功能.... 重点是使用the_excerpt() 并更改字数并删除[...]

我现在的问题是如何通过$new_length PHP中此筛选器的变量(<);5.3?

1 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

你可以尝试第二种选择,但我认为这太过分了。相反,只需编写自己的自定义模拟wp_trim_excerpt() (应用excerpt_lengthexcerpt_more 过滤到摘录),如下所示:

function custom_excerpt( $new_length = 20, $new_more = \'...\', $strip = false ) {
    // Start with the content
    $text = get_the_content(\'\');

    // Do stuff to it
    $text = strip_shortcodes( $text );
    $text = apply_filters(\'the_content\', $text);
    $text = str_replace(\']]>\', \']]&gt;\', $text);

    // Use custom values
    $excerpt_length = $new_length;
    $excerpt_more = $new_more;
    $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );

    // Strip?
    if ( ! $strip ) {
        $text = \'<p>\' . $text . \'</p>\';
    }

    // Output
    echo $text;
}
溢流方法:

function custom_excerpt( $new_length = 20, $new_more = \'...\', $strip = false ) {
    // Excerpt length
    add_filter( \'excerpt_length\', \'custom_excerpt_length\', 999 );
    function custom_excerpt_length( $new_length ) {
        return $new_length;
    }

    // Excerpt More
    add_filter( \'excerpt_more\', \'custom_excerpt_more\' );
    function custom_excerpt_more( $new_more ) {
        return $new_more;
    }

    // Output
    $output = get_the_excerpt();
    $output = apply_filters(\'wptexturize\', $output);
    $output = apply_filters(\'convert_chars\', $output);
    if(!$strip)
        $output = \'<p>\' . $output . \'</p>\';
    echo $output;
}

结束

相关推荐

Replace text in excerpt

我的自定义WP安装有一个单独的主题,将用于移动用户,在我的情况下,我需要在所有摘录实例中更改html标记,但在不更改DB的情况下,我发现这个简单的功能非常完美,但我无法使其工作,什么都没有发生。function replace_content_on_the_fly($text){ $replace = array( // \'words to find\' => \'replace with this\' \'<p>\' => \'<d