如何检查用户在定制器中的字段中输入的是否是数字?

时间:2016-06-29 作者:jetyet47

处理我的第一个主题,并考虑添加一些选项,这些选项具体是数字,如菜单级别的数量或在主页上显示的帖子的数量。是否可以检查customizer中的输入是否只是一个数字?也许还有一个特定的限制,比如菜单级别为5级,主页上的帖子为20级或更多?以下是我正在使用customizer api编写的代码,作为示例:

$wp_customize->add_setting( \'posts_number_home\' , array(
\'default\'     => \'10\',
\'transport\'   => \'refresh\',
\'sanitize_callback\' => \'sanitize_text_field\',
) );

$wp_customize->add_control( new WP_Customize_Control( 
$wp_customize, 
\'posts_number_home\',
array(
    \'section\'  => \'mytheme_options\',
    \'settings\' => \'posts_number_home\',
    \'type\' => \'text\',
    \'priority\' => 10,
) 
));

2 个回复
SO网友:Dmitry Mayorov

你是对的。不过,有一些修复/建议。

您应该使用absint 作为清理回调因此,经过优化的代码片段应该如下所示:

$wp_customize->add_setting( \'posts_number_home\' , array(
    \'default\'           => 10,
    \'sanitize_callback\' => \'absint\',
) );

$wp_customize->add_control( \'posts_number_home\', array(
    \'label\'    => __( \'Number of posts to display on homepage\', \'mytheme\' ), 
    \'section\'  => \'mytheme_options\',
    \'settings\' => \'posts_number_home\',
    \'type\'     => \'number\',
    \'priority\' => 10,
    \'input_attrs\' => array(
        \'min\' => 1,
        \'max\' => 10
    )
) );
2016年1月7日编辑:使用intval 不正确,因为Customizer将第二个对象参数秘密传递给清理回调,而intval 需要一个可选整数。所以清理非负整数的最佳方法是absint.

SO网友:jetyet47

我想我知道了。类型编号绝对有效,不允许文本输入。它还包括供用户使用的小箭头计数器。您可以添加最小-最大属性。有人告诉我这是否有任何错误,尤其是卫生处理。

$wp_customize->add_setting( \'posts_number_home\' , array(
\'default\'     => \'10\',
\'transport\'   => \'refresh\',
\'sanitize_callback\' => \'sanitize_text_field\',
) );

$wp_customize->add_control( new WP_Customize_Control( 
$wp_customize, 
\'posts_number_home\',
array(
    \'label\'    => __( \'Number of posts to display on homepage\', \'mytheme\' ), 
    \'section\'  => \'mytheme_options\',
    \'settings\' => \'posts_number_home\',
    \'type\' => \'number\',
    \'priority\' => 10,
    \'input_attrs\' => array(
    \'min\'   => 1,
    \'max\'   => 10,)
) 
));

相关推荐