你的update_option
应该在钩子回调中,并且应该检查$_POST[\'custom_welcome_panel\']
在尝试更新选项之前设置。否则,这可能会在每次加载页面时覆盖您的选项。老实说,正如我所写的,我可以把我想要的任何东西都塞进期权价值中。我只需要向该网站发送一个POST请求。这是非常不安全的。
移动您的update_option
在您的函数中,在尝试使用它之前,请检查它是否已设置且不为空,以及process it like post content, 至少
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
You should also be using nonces.
看起来你可能正在破解一个核心文件(
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>")
请注意,您有两套
"
现在引号在
<p>
然后在之后关闭
href=
然后再次打开
yay
. 问题是中间有一些离群的角色。以下方法有效,但前提是标记一致且始终使用
"
围绕属性。
jQuery("#welcome-panel").html(\\\'\'.$customwelcome_panel.\'\\\').delay(300).fadeTo(\\\'slow\\\', 1);
使用
addslashes
将更加稳健:
jQuery("#welcome-panel").html("\'.addslashes($customwelcome_panel).\'").delay(300).fadeTo(\\\'slow\\\', 1);
我不确定这会有多可靠。我只花了五分钟测试它。
把这些放在一起,我认为应该行得通。我不对您的项目的安全性或解决方案的健壮性负责。我是从几乎不充分的信息中拼凑出来的,但这是非常基本的东西。
参考文献
http://codex.wordpress.org/Data_Validation