2016-03-18 8 views
0

私は、既存のプラグインの動作を拡張するwordpressプラグインを作成しています。既存のショートコードを新しいものでラップする

既存のプラグインは[original]という名前のショートコードを定義していますが、いくつかの機能を追加するショートコードが[wrapper]ですが、基本的に同じ動作をします。

これは私が書いたコードです:

function wrapper_shortcode($atts,$content) 
{ 
    //Do something... 
    return do_shortcode("[original]$content[/original]"); 
} 
add_shortcode('wrapper', 'wrapper_shortcode'); 

私の質問は、どのように私は[original]ショート隣の属性($atts)を通過しないされ、コールするよりも、これを行うには良い方法があるがdo_shortcode()機能?

+1

オリジナルのショートコードを修正し、出力が '' do_shortcode'''関数でラップされていることを確認してから、元のショートコードにいくつかのフィルタまたはフックがある場合は最高です – silver

+0

原点を変更する元のプラグインが更新されたときにプラグインコードの変更が無効になるので、ショートコードはオプションではありません。 –

+1

元のショートコードを '' remove shortcode'''で削除し、同じショートコードタグを使用していますが、別の関数を実行していますが、元の関数が変更されたらカスタム関数を更新する必要があります。それでも動作しない場合は、regexを使用して元のshortcodeを探し、あなたの関数内でいくつかの修正を加えて実行してください。それは難しいことではありませんが、私は正規表現が良くないので、例を挙げることはできません。 – silver

答えて

1

私が正しく理解していれば、すべてのショートコードパラメータを取得し、盲目的にwrapperからoriginalショートコードに渡したいとします。

私はではありません。は、適切な検証なしでパラメータを渡すことをお勧めします。

あなたはいくつかのオプションがあります:銀が示すように、originalを削除し、(あなたがプラグインを更新することはできませんので)、独自の修正版に置き換える

  1. を。プラグインがリリースされるたびに更新してください。

  2. 検証して通過させるパラメータを追加します。それを返品に戻してください。推奨しない


- ちょうどあなたがすることができるので、あなたがすべきことではありません。

次のような何かをしたいように聞こえるん - あなたがこれを行うにした場合は、各属性を検証しない限り、それが伝わってくるように、あなたは本当に、トラブルを求めすることができます

function wrapper_shortcode($atts, $content) { 
    $o_shortcode_atts = " "; 
    foreach ($atts as $key_att => $val_att) { 

     // Validate $key_att and $val_att here - FOR SECURITY!!! 

     $o_shortcode_atts = $o_shortcode_atts . " ".$key_att."=\"".$val_att."\" "; 
    } 
    trim($o_shortcode_atts," "); 

    // Do something... 

    return do_shortcode("[original".$o_shortcode_atts."]".$content."[/original]"); 
} 

警告 - これはあなたが検証しない場合にはトラブルの原因となる可能性があります

+0

なぜ属性を盲目的に問題にするのですか?とにかく '[original a = 1]'や '[wrapper a = 1]'を使うことができるので、なぜ入力の検証をする必要がありますか?それはすでに '[オリジナル]'ショートコードコード –

+0

でカバーされているはずです...しかし、あなたは100%を知らないのです - 元は未知のパラメータを検証するかもしれません(したがって、盲目的に言えば - 何が解析されているかを知っていれば未知で定量化されません)オリジナル]はパラメータをとり、DBクエリに直接プラグインすることができます。わかりません。提供されている例では、任意のユーザー入力を取得し、処理する別のショートコードを効果的に「再表示」します。ある種の注入ベクトルやクロスサイトスクリプティングの問題が発生する可能性があります。私はちょうどすべての入力を確認するために常に教えられてきた – Damien

+0

https://xkcd.com/327/ https://www.smashingmagazine.com/2011/01/keeping-web-users-safe-by-sanitizing-input-データ/ – Damien

関連する問題