下記のように、生のHTML出力にパラメータ付きのショートコードを含めようとしました。
<a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a>
これはPHP関数do_shortcode()
をクラッシュさせます。
ショートコードでは、このようなことは実際には不可能ですか?
メソッドの説明自体に警告が含まれています。
山括弧がタグにネストされていると、
unfiltered_html
*機能を持つユーザーは予期しない出力を受け取る可能性があります。
ただし、PHPクラッシュは、起こり得るはずの予期しない出力の一種ではありません。
シモンズ:呼び出されている機能は
function echocode( $atts ){
return "Hello World";
}
として追加
add_shortcode("foocode", "echocode");
機能は実行されません。 (開始エコーコードは印刷されていません)
ショートコードはhtml属性では許可されていません、ショートコードはプログラミング言語ではありません、彼らは適切なhtmlコンテンツへのプレースホルダーです。
これが誰かに役立つことを願っています:
これをする代わりに:<a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a>
あなたはこれを行うことができます:[foocode parameter1=value parameter2=othervalue]
そして次にこれを行う:
add_shortcode( 'foocode', 'prefix_foocode' );
function prefix_foocode( $atts ) {
// Normalize $atts, set defaults and do whatever you want with $atts.
$html = '<a href="https://example.com/folder/edit.php?action=someaction&id=' . $atts['parameter1'] .'&edittoken=' . $atts['parameter2'] . '">linktext</a>'
}
価値のあることに、パラメータを受け付けないショートコードはHTMLタグで機能するように見えます。そうでないパラメータを持つものです。
例:<a href="https://example.com/folder/edit.php?action=someaction&id=[foocode parameter='value']&edittoken=[foocode parameter='othervalue']">linktext</a>
が機能しない
例:<a href="https://example.com/folder/edit.php?action=someaction&id=[foocode]&edittoken=[foo-other-code]">linktext</a>
は動作します(少なくとも私にとっては)
私は自分のサイトで画像のパスを出力するためにこのような簡単なショートコードを使ったので、毎回パスを覚えておく必要はありません(私はメディアマネージャを使いません)。
これが後でこの質問に遭遇するかもしれない誰かに役立つことを願っています。
これで試してみてください -
<a href="https://example.com/folder/edit.php?action=someaction&id=<?php echo do_shortcode("[foocode parameter='value']"); ?>&edittoken=<?php echo do_shortcode("[foocode parameter='othervalue']"); ?>">linktext</a>
生のHTML要素の内部でショートコードを実行するには、shortcodeを介して呼び出されているコールバック関数を見つけて、生のhtml要素にその関数をエコーアウトする必要があります。
例えば、あなたのショートコードが[foo_code]
であるならば、このショートコードのためのadd_shortcode()を見つけることによって(この場合[foo_code])この関数が実行されているときにどの関数がコールバックされているか調べます -
add_shortcode('foo_code', 'foo_callback_function');
さて、どの関数が呼び出されているのかがわかったら、次のように生のHTMLでこの関数を単純にエコーすることができます。
[echo foo_callback_function();]
詳細については、なぜチェックアウトがうまくいくのかについて この答え 。それが役に立てば幸い!