0

ショートコードの簡単な例:

function s_print( $atts ){
    return 'http://abc.com/?foo=1&bar=2';
}
add_shortcode( 'my_shortcode', 's_print' );

そして、次のように返します。

http://abc.com/?foo=1&bar=2

この関数は、ショートコードを介してページの本文へのリンクを挿入します[my_shortcode]が、&常に に変更され&#038、これによりリンクが壊れます (もう機能していません)。私はたくさんググった。いくつかの解決策があります:

wp_specialchars_decode($foo);
remove_filter('the_content','wptexturize');

しかし、それらはテーマ(functions.php)でのみ使用されるようで、ショートコードでは機能しません(ショートコード関数の前または内部に追加しようとしました)。

formatting.php多くの人が使用するプラグインに取り組んでいるため、WordPressファイルのいくつかの行にコメントを付けるという最後の解決策に陥りたくありません。

4

3 に答える 3

6

clean_urlフィルターで対処した同様の問題がありました。ここで私の回答の編集を参照してください。

ショートコードではなかったので、特定の状況で動作することを保証できません. でも試してみる価値はあるかもしれません。

oyatekによるEDIT (上記のリンクからの修正されたソリューション):

function so_handle_038($content) {
    $content = str_replace(array("&","&"), "&", $content); 
    return $content;
}
add_filter('the_content', 'so_handle_038', 199, 1);
于 2012-12-13T06:36:13.780 に答える
3

実際、ビジュアル エディタを使用すると、&が に変更され&ます。ただし、テキスト エディターを使用する場合、1&文字の後に文字が続く場合は同じまま&sthですが、 に変更され&sthます。

全体で または のいずれか&に変更されます。上記の解決策だと思います:&&

function so_handle_038($content) {
    $content = str_replace(array("&","&"), "&", $content); 
    return $content;
}
add_filter('the_content', 'so_handle_038', 199, 1);

あなたのケースでは while 内のso_handle_038();すべて&の s と&sをデコードするため、配列内のものだけをデコードする必要があるため、一種のやり過ぎです。ショートコード エントリはおそらく次のようになります。$content$atts

[my_shortcode url="http://abc.com/?foo=1&bar=2" /]

そして、次の$attsようになります。

array( 'url' => "http://abc.com/?foo=1&bar=2" )

また:

array( 'url' => "http://abc.com/?foo=1&bar=2" )

したがって、デコードするだけで済みます$atts['url']:

html_entities_decode($atts['url']);

何かをしようとする前に。

于 2013-07-28T00:25:45.040 に答える
0

これは私が使用した応急処置のハックで、基本的にワードプレスの問題を修正するために (iFrame 内にリンクがあったため)、Bitly に移動し、アンパサンドと記号なしでリンクを作成しました! 最終的に、 & 記号は何もありませんが、同じ場所を指しているリンクを取得することになりました (さらに、リンクの Bit.ly 経由で無料の追跡を取得したので、リンクの回数を確認できるため、ボーナスが 2 倍になります)クリックされました)。「最良の」解決策ではありませんが、私にとってはうまくいき、Wordpress の & 記号の他の解決策を見つけようとして時間を無駄にする必要はありませんでした。

于 2015-12-04T13:12:44.913 に答える