Wordpress打破了使用Options API存储的超链接

时间:2015-12-30 06:56:45

标签: php wordpress

我有一个Wordpress主题,使用update_option功能在Wordpress选项中存储版权行。在文中,我将链接包含在我的网站上。

Copyright &copy; 2015 ABC Company, Inc.  Site design by <a href="http://www.example.com">My Company</a>.

然后在主题的页脚中检索该信息。

<p id="footer-copyright"><?php echo get_option('copyright'); ?></p>

但是,该链接显示为http://www.blogsite.com/"http://www.example.com/"。我假设内部Wordpress试图从它认为是页面slug的东西创建一个绝对URL。我怎么能阻止这种行为?我检查了get_options中定义的wp-includes/options.php函数,并确定它不是问题。问题发生在主题处理的后期。

编辑:

根据大卫的建议,我检查了数据库。在写入之前,此选项的值正在被更改。正在解析HTML实体并且正在转义引号。这是DB中的实际值。

Copyright © 2015 ABC Company, Inc.  All rights reserved. Site design by <a href=\"http://www.example.com\">My Company</a>.

当我在数据库中手动更正它时,它显示正常。在将选项值写入数据库之前,Wordpress正在执行某种后处理或解析。

1 个答案:

答案 0 :(得分:0)

Wordpress在其清理过程中不必要地逃避选项值中的引号。最简单的解决方案是在将值写入数据库之前使用pre_update_option_(option name) hook处理并删除不必要的转义字符。此挂钩可以在您的主题functions.php文件中实现。 (NAME所有大写字母中的update_option应替换为function myplugin_update_option_NAME( $new_value, $old_value ) { $new_value = str_replace('\"', '"', $new_value); // replaces \" with " return $new_value; } function myplugin_init() { add_filter( 'pre_update_option_NAME', 'myplugin_update_option_NAME', 10, 2 ); } add_action( 'init', 'myplugin_init' ); 函数中其他位置定义的选项的名称。

stripslashes

我故意避免使用PHP的Sites.destroy_all({ :_id => BSON::ObjectId('5685a45be4b06ab5911dcd12')}) 函数来保持代码简单并避免检查魔术引号。

Wordpress实际上并没有将任何内容添加到超链接目标。但是,由于超链接无法使用转义引号进行识别,因此将其视为导致所述行为的相对链接。