私は、テキストウィジェットでショートコードの処理を可能にするために以下のフィルタを使用できることを知っています:
add_filter( 'widget_text', 'shortcode_unautop');
add_filter( 'widget_text', 'do_shortcode');
いくつかの特定のショートコードのみを処理用にホワイトリストに登録し、すべてのショートコードを処理するだけではどうしたらよいですか
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;
}
または少し簡単です。
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関数 から引用しました。