web-dev-qa-db-ja.com

フィルタの前にショートコードを実行する

私のユーザーはスニペットコードをコメントに入れています。私はこのためのショートコードを作成しました:

function post_codigo($atts,$content=""){

        return '<code>'.$content.'</code>';
}

add_shortcode('codigo','post_codigo');  

問題は、HTMLがコードタグにラップされる前にフィルタされることです。

私はフィルタの前に実行されるショートコードを得ることができれば私は使用できると思います

function pre_esc_html($content) {
  return preg_replace_callback(
    '#(<code.*?>)(.*?)(</code>)#imsu',
    create_function(
      '$i',
      'return $i[1].esc_html($i[2]).$i[3];'
    ),
    $content
  );
}

add_filter(
  'the_content',
  'pre_esc_html',
  9
);

私はここで見つけました。あなたが思うこと?

更新:Ok私のショートコードを次のように変更しました。

 function post_codigo($atts,$content=""){

            return '<code>'.esc_html($content).'</code>';
    }

    add_shortcode('codigo','post_codigo');

それでもまだ追加

コード全体を複数のタグに分割します。

3
chifliiiii

Wptexturizeから除外されるショートコードのコレクションである配列$ no_texturize_shortcodesをフィルタリングできます。こうすると、[codigo] shortcodeタグ内のすべてがテクスチャ化されません。

add_filter( 'no_texturize_shortcodes', 'no_texturize_codigo_shortcode' );

function no_texturize_codigo_shortcode( $excluded_shortcodes ) {
    $excluded_shortcodes[] = 'codigo';
    return $excluded_shortcodes;
}
3
goldenapples

ショートコード内のコンテンツはすでにwpautop()no_texturize_shortcodesにフックされている他のフィルタによって既にフィルタされていたので、the_contentフィルタは私には何もしませんでした。 do_shortcodeに関連してthe_contentのフィルタ順序を変更することに頼ったので、2つのうち最初に実行されることを確認できます。方法は次のとおりです。

remove_filter('the_content', 'do_shortcode', 11); // AFTER wpautop()
add_filter('the_content', 'do_shortcode', 9); // BEFORE wpautop()

これはかなりうまくいくように思えますが、これはWordPressがそのtext/html変換を処理する方法へのかなり広範囲の変更であるので私はあなたがそれを注意して使うことを勧めます。あなたが使っているプラ​​グインやショートコードが多ければ多いほど、この変更に関するトラブルに遭遇する可能性が高くなります。

1
Simon

あなたのテーマはあなたの訪問者のコメントを表示するために comment_text() を使っていますか?

もしそうなら変更してみてください:

<?php comment_text(); ?>

に:

<?php echo do_shortcode(apply_filters('comment_text', get_comment_text())); ?>

これはコメントテキストに "comment_text"フィルタを適用します - 前に それはショートコードを適用します。

これはコメントが表示されているところならどこでもあなたのテーマテンプレートで行われるべきです。

0
sxalexander

あなたはHTML文字を使用する必要がありますか?

return '&lt;code&gt;'.$content.'&lt;/code&gt;';

.

0
Sagive SEO