我如何才能将特定的短码列入白名单,以便在文本小部件中进行处理?

时间:2014-03-12 作者:MadtownLems

我知道我可以使用以下过滤器来处理文本小部件中的短代码:

add_filter( \'widget_text\', \'shortcode_unautop\');
add_filter( \'widget_text\', \'do_shortcode\');
我怎样才能只列出几个特定的短代码进行处理,而不只是处理每个短代码?

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成
add_filter( \'widget_text\', \'wpse_137725_shortcode_whitelist\' );

/**
 * Apply only whitelisted shortcode to content.
 * 
 * @link http://wordpress.stackexchange.com/q/137725/1685
 * 
 * @param   string  $text
 * @return  string
 */ 
function wpse_137725_shortcode_whitelist( $text ) {
    static $whitelist = array(
        \'gallery\',
        \'form\',
    );

    global $shortcode_tags;

    // Store original copy of registered tags.
    $_shortcode_tags = $shortcode_tags;

    // Remove any tags not in whitelist.
    foreach ( $shortcode_tags as $tag => $function ) {
        if ( ! in_array( $tag, $whitelist ) )
            unset( $shortcode_tags[ $tag ] );
    }

    // Apply shortcode.
    $text = shortcode_unautop( $text );
    $text = do_shortcode( $text );

    // Restore tags.
    $shortcode_tags = $_shortcode_tags;

    return $text;
}
SO网友:pravdomil

或者更简单一点。

function do_shortcode_only_for($content, $tagnames) {
  $pattern = get_shortcode_regex($tagnames);
  $content = preg_replace_callback("/$pattern/", \'do_shortcode_tag\', $content);
  return $content;
}
摘自原文do_shortcode function.

结束

相关推荐

Has_ShortCode()-如何检测嵌套的短码

我正在使用has_shortcode() 要检测短代码,它可以工作,但根本不能。如果我将这个指定的短代码放在另一个短代码中has_shortcode() 功能停止工作。has_shortcode( $post->post_content, \'slider\' ) 例如:[2col] //left column [slider] [2col_next] //right column [slider] [/2col] Thehas_shortcode