UPDATE_OPTION,不更新空选项吗?

时间:2011-06-15 作者:Keith Donegan

我怎样才能不让空数据进入wordpress?

<?php 
foreach($_POST[\'eirepanel_inline_ads_options_name\'] as  $post_eirepanel_inline_ads_options_name):
if(empty($post_eirepanel_inline_ads_options_name)): 
    echo \'empty\';
else: 
    update_option(\'eirepanel_inline_ads_options\', $_POST);
    $eirepanel_inline_ads_options = get_option(\'eirepanel_inline_ads_options\');
endif; 
endforeach;
?>

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

更重要的是,您不应该让*不受信任、未初始化的$\\u发布数据*到WordPress中。

但我认为问题在于,您正在使用整个$\\u POST数据更新选项,而不是使用适当的数组键:

update_option(\'eirepanel_inline_ads_options\', $_POST);
应该是这样的:

update_option(\'eirepanel_inline_ads_options\', $_POST[\'eirepanel_inline_ads_options_name\']);
您的插件选项是离散的(每个选项一个DB条目)还是选项数组?

EDIT

由于您使用的是选项数组,正确的方法是:

定义一个数组来保存$_POST 数据($input = array() )$valid_input = array() )$_POST 数据更新$valid_data 已消毒的阵列$input 数组传递更新的$valid_data 返回DB,例如。

$input = ( isset( $_POST ) ? $_POST : false );
$valid_input = get_option( \'eirepanel_inline_ads_options\' );

foreach ( $input as $key ) {
   // sanitize data here
}

$valid_input = array_merge( $valid_input, $input );

update_option( \'eirepanel_inline_ads_options\', $valid_input );
只是又快又脏,但应该给你一个主意。

另外:在这里使用设置API将特别有用。

SO网友:TheDeadMedic

根据您对@Chip建议的回应,我建议您这样命名您的输入;

<input type="text" name="eire[option_key_name]" value="hello world" />
<input type="text" name="eire[option_key_another]" />
<input type="text" name="eire[nasty_key_possibility]" />
然后在代码中;

$options = shortcode_atts( array(
    \'option_key_name\' => \'default value\',
    \'option_key_another\' => \'foobar\'
), ( array ) $_POST[\'eire\'] );
$options 现在将只包含传递给的显式键shortcode_atts(), 数据来自$_POST 覆盖默认值。

Array (
    option_key_name => hello world,
    option_key_another\' => foobar
)
你会发现我用过input array names, 以便为您的$_POST 数据(而不是为每个选项输入名称命名,然后必须在其上循环并在保存之前删除)。

Note: This only strips out keys we don\'t want. 您可能需要进一步清理各个值,具体取决于它们的数据类型。如果它们都是相同的,您可以将回调映射到该数组并完成处理。

例如,它们都是纯文本字段;

$options = array_map( \'wp_strip_all_tags\', $options );

结束

相关推荐

Updates for a private plugin?

如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点