我正在写一个cookie通知插件,我想知道当我通过options.php发布/存储选项并通过get_option()使用选项时,我是否需要对输入进行sanitzie或转义选项的输出。
我只是想创建一个安全的插件。
这是一个如何处理选项的例子:
function formz_register_settings()
{
add_option('formzname', 'guckguck');
register_setting('formz_settings', 'formzname', 'formz_callback');
}
add_action( 'admin_init', 'formz_register_settings' );
function formz_register_options_page() {
add_options_page('Page Title', 'FORMZ', 'manage_options', 'formz', 'create_admin_option_page');
}
add_action('admin_menu', 'formz_register_options_page');
function create_admin_option_page(){
?>
<h1>Formulare bearbeiten</h1>
<hr>
<form method="post" action="options.php">
<?php settings_fields('formz_settings'); ?>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="formzname">Facebook Pixel ID</label></th>
<td><input class="regular-text code" type="text" id="formzname" name="formzname"
value="<?php echo esc_html(get_option('formzname')); ?>"/></td>
</tr>
</table>
<?php submit_button(); ?>
</form>
<br>
<?php echo esc_html(get_option('formzname')); ?>
<?php
}
?>
然后我使用get_option('bla');在前端显示设置。
是options.php的正确方法,还是admin-post.php更适合它?什么是差异?
基本上我只是想知道我的代码是否就像发布一样。
谢谢!
答案 0 :(得分:0)
WordPress将确保在运行查询时通过转义输入来保存在数据库中是安全的,但始终最佳做法是确保使用sanitize_text_field
之类的内容自行清理它
但是,您可以在register_setting
函数调用中定义保存时使用的消毒方法,这样您就不必担心自己这样做了。
所以你的代码在这里:
register_setting(
'formz_settings',
'formzname',
'formz_callback'
);
可以更改为:
register_setting(
'formz_settings',
'formzname',
array(
'type' => 'string',
'sanitize_callback' => 'sanitize_text_field'
)
);