WPのダッシュボードにカスタムのウェルカムパネルを作成しようとしていますが、どこに問題があるのかわかりません。 HTMLを追加することはできません。
あなたのupdate_option
はフックコールバックの中にあるべきで、オプションを更新しようとする前に$_POST['custom_welcome_panel']
が設定されているかどうかを確かめるべきです。さもなければそれはページがロードされる度にあなたのオプションを上書きするかもしれません。そして、正直なところ、書かれているように私はそのオプションの値に欲しいものは何でも押し込むことができました。サイトにPOSTリクエストを送信するだけです。非常に不安です。
あなたのupdate_option
をあなたの関数の中に移動し、それを設定しようとする前に空になっていないことを確認し、そして 少なくともポストコンテンツのように処理します 。
function custom_welcome_panel() {
// register the setting
if (!empty($_POST['custom_welcome_panel'])) {
$option = wp_kses_post( $_POST['custom_welcome_panel'] );
update_option('custom_welcome_panel', $option);
}
$customwelcome_panel = html_entity_decode(get_option( 'custom_welcome_panel' ));
// the rest of your code
あなたがコアファイル(options.php
)をハッキングしている可能性がありますが、それは真実なら非常に悪い考えです。もしそうなら、そのハックは次回WordPressが更新されたときに上書きされ、あなたのコードは機能しなくなります。
私はこれを試してみました...
update_option('html_test', '<p><a href="yay">Does HTML WOrK?</a></p>');
...そしてhtmlはうまく挿入され、それはうまく戻ってきます。それで、私はjQueryを見ました。
問題はここにあります:
jQuery("#welcome-panel").html("'.$customwelcome_panel.'")
私のHTMLによって生成されたものがどうなるか想像してみてください。
jQuery("#welcome-panel").html("<p><a href="yay">Does HTML WOrK?</a></p>")
"
が2セットあります。引用符は<p>
の前に開き、href=
の後に閉じ、yay
の後に開きます。問題は、その間に浮遊文字があることです。次のように動作しますが、マークアップが一貫しており、常に属性の周囲に"
sを使用している場合に限られます。
jQuery("#welcome-panel").html(\''.$customwelcome_panel.'\').delay(300).fadeTo(\'slow\', 1);
addslashes
を使うほうがより頑強です:
jQuery("#welcome-panel").html("'.addslashes($customwelcome_panel).'").delay(300).fadeTo(\'slow\', 1);
それがどれほど信頼できるかはわかりません。テストには5分しかかかりませんでした。
それをまとめると、うまくいくはずだと思います。私はあなたのプロジェクトの安全性や解決策の頑健性について責任を負いません。私はほとんど十分な情報からこれを一緒にハッキングしていますが、それはかなり基本的なものです。