我可以将短码输出用作HTML属性值吗?

时间:2017-01-27 作者:Hairgami_Master

在一个范围内,短代码输出工作:

<span>[sola_testimonials_count type=\'all\']</span>

Result:
<span>5,205</span>
但作为属性值,它不会被解析:

<span data-value="[sola_testimonials_count type=\\\'all\\\']"></span>

Result:
<span data-value="[sola_testimonials_count type=\\\'all\\\']"></span>
这是一个第三方插件,但我显然有代码,可以对其进行操作。有没有一种方法可以将短代码解析为HTML属性值?我不是Wordpress开发人员,所以如果这是一个显而易见的答案,请原谅我。

非常感谢!

3 个回复
SO网友:Ismail

我不擅长Regex但是do_shortcode 基本上不会解析属性中的任何短代码,这可能会帮助您:

add_filter(\'the_content\', function($c){
    $pattern = \'/<span\\s*(.*?)data-value=["\\\']?\\[(.*?)\\]["\\\']?\\s*(.*?)>\\s*(.*?)\\s*<\\/span>/si\';
    $c = preg_replace_callback($pattern, function($c){
        return isset( $c[2] ) ? str_replace(
            $c[2],
            do_shortcode("[{$c[2]}]"),
            $c[0]
        ) : array_pop($c);
    }, $c);
    return $c;
});

SO网友:Marc Wiest

我知道这个帖子是从一月份开始的,但我只想简单地指出,正如codex中所记录的那样,html属性中允许使用短代码。

https://codex.wordpress.org/Shortcode_API#HTML

SO网友:sound wave

这并不完全是你想要的,但可能有助于找到解决方案

/* this simulates your shortcode [sola_testimonials_count type=\'all\'] */
function num_sc( $atts ) { return \'5,205\'; }
add_shortcode( \'num\', \'num_sc\' );

/* use like this [test]...[/test] to obtain <span data-value="5,205">...</span> */
function test_sc( $atts, $content = null ) {
    remove_filter( \'the_content\', \'wpautop\' );
    $content = apply_filters( \'the_content\', \'<span data-value="[num]">\' . $content . \'</span>\' );
    add_filter( \'the_content\', \'wpautop\' );
    return $content;
}
add_shortcode( \'test\', \'test_sc\' );
结果

/* INPUT */
AAA [test]this is a test[/test] BBB
/* OUTPUT HTML */
AAA <span data-value="5,205">this is a test</span> BBB

相关推荐

redirect if shortcode exists

WordPress初学者。我试图检查用户请求的页面中是否存在短代码,如果存在,则在用户未登录时重定向。function redirect_to_home() { if (has_shortcode(get_the_content(), \'shortcode\')) { if(!is_admin() && !is_user_logged_in()) { //redirect exit(); }