如何在没有Java脚本的情况下将HTML5‘Required’属性添加到wp_Dropdown_Categories()?

时间:2015-04-05 作者:Mayeenul Islam

我正在使用wp_dropdown_categories() 用于填充<select> 具有自定义分类术语的字段。

如果代码如下所示:

<?php
$args = array(
    \'show_option_none\'   => __( \'Select one\', \'text-domain\' ),
    \'taxonomy\'           => \'my_tax\',
    \'id\'                 => \'tax-type\',
    \'echo\'               => 1,
);
wp_dropdown_categories( $args );
它工作得很好。我可以使用jQuery将字段设置为必填字段:

$(\'#tax-type option:first\').val(null);
$(\'#tax-type\').attr(\'required\', true);
它也在起作用。但是,我想在没有JavaScripts的情况下使该字段成为必填字段。我尝试通过使\'echo\'0:

$new = array();
$new[\'required\'] = true;
$mrg = array_merge($args, $new);
var_dump($mrg); //outputs \'required\'=>1
$dd = wp_dropdown_categories( $mrg );
echo $dd;
我也能理解为什么它不起作用。但是,有没有一种方法可以在没有JavaScripts的情况下实现这一点?有过滤器吗?请不要只是说:

从核心复制并使用该选项创建新的核心

我的第二个问题是:为什么none\\u选项的值是-1? 为什么不呢\'\' (空)?

4 个回复
最合适的回答,由SO网友:cybmeta 整理而成

如果要应用required 每次使用时的属性wp_categories_dropdown, 使用wp_dropdown_cats 按照其他答案中的建议进行筛选:

add_filter( \'wp_dropdown_cats\', \'wp_dropdown_categories_required\' );
function wp_dropdown_categories_required( $output ){
    return preg_replace( 
        \'^\' . preg_quote( \'<select \' ) . \'^\', 
        \'<select required \', 
        $output 
    );
}
如果要应用required 属性仅在特定情况下,可以使用wp_dropdown_categories 具有echo 参数设置为false, 介绍required 返回字符串中的属性,然后echo:

$args = array(
    \'show_option_none\'   => __( \'Select one\', \'text-domain\' ),
    \'taxonomy\'           => \'my_tax\',
    \'id\'                 => \'tax-type\',
    \'echo\'               => false,
);

$cat_dropdown = wp_dropdown_categories( $args );

$cat_dropdown = preg_replace( 
        \'^\' . preg_quote( \'<select \' ) . \'^\', 
        \'<select required \', 
        $cat_dropdown
    );

echo $cat_dropdown;
或者更好,将过滤器与自定义required 属性:

add_filter( \'wp_dropdown_cats\', \'wp_dropdown_categories_required\', 10, 2 );
function wp_dropdown_categories_required( $output, $args ){

    if( isset( $args[\'required\'] ) && $args[\'required\'] ) {

       $output = preg_replace( 
            \'^\' . preg_quote( \'<select \' ) . \'^\', 
            \'<select required \', 
            $output 
       );

    }

    return $output;

}
然后使用wp_dropdown_categories 像这样:

$args = array(
    \'show_option_none\'   => __( \'Select one\', \'text-domain\' ),
    \'taxonomy\'           => \'my_tax\',
    \'id\'                 => \'tax-type\',
    \'required\'           => true,
);

wp_dropdown_categories( $args );
关于第二个问题,您应该知道“每个线程一个问题”规则。记住这一点,以便将来提问。而不是说,-1 是的默认值option_none_value 论点这个论点没有被记录下来(现在是了,我把它添加到codex). 您可以按如下方式覆盖它:

$args = array(
    \'show_option_none\'   => __( \'Select one\', \'text-domain\' ),
    \'option_none_value\'  => NULL,
    \'taxonomy\'           => \'my_tax\',
    \'id\'                 => \'tax-type\',
    \'echo\'               => false
);
PD:我不确定NULL 是的有效值option 在a中select 要素另外,请注意\'\' (空字符串)与NULL. 空字符串是长度为零的字符串数据类型;NULL 不是任何日期类型,也没有数据属性,它什么都不是。

SO网友:Mayeenul Islam

更新:从WordPress 4.6开始,我们可以直接在wp_dropdown_categories().

<?php
$args = array(
    \'show_option_none\'   => __( \'Select one\', \'text-domain\' ),
    \'taxonomy\'           => \'my_tax\',
    \'id\'                 => \'tax-type\',
    \'echo\'               => 1,
    \'required\'           => true
);
wp_dropdown_categories( $args );
Source: Core Tract Ticket

SO网友:William Turrell

有一个过滤器-wp_dropdown_cats (据我所知,任何地方都没有记录。)

它为您提供了两个参数,HTML字符串和提供给wp_dropdown_categories, 您需要返回新的HTML。

SO网友:websupporter

如果您查看了wp includes/category模板中的函数。php您将看到,没有“必需”内置选项。所以我们必须选择另一种方式$args[\'required\'] 不起作用-你知道的。

我们找到过滤器\'wp_dropdown_cats\', 它在函数返回此输出之前为我们提供了输出。所以我们可以使用这个过滤器"<select ""<select required ":

add_filter( \'wp_dropdown_cats\', \'wp_dropdown_categories_required\' );
function wp_dropdown_categories_required( $output ){
    return preg_replace( 
        \'^\' . preg_quote( \'<select \' ) . \'^\', 
        \'<select required \', 
        $output 
    );
}
关于你的第二个问题:

为什么none\\u选项的值是-1?为什么不是“”(null)?

这是标准值,函数将其添加到“无”选项中。您可以使用$args[\'option\\u none\\u value\']更改此值。例如:

$args = array(
    \'show_option_none\'   => \'test\',
    \'option_none_value\'  => \'x\'
);
wp_dropdown_categories( $args );
参考号:https://codex.wordpress.org/Function_Reference/wp_dropdown_categories

如果只想将“required”属性添加到特定的select字段,可以添加一个“required”属性,并在过滤器中进行检查:

    function show_pages(){
    $args = array(
        \'show_option_none\'   => \'test\',
        \'option_none_value\'  => \'x\',
        \'required\'           => true
    );
    wp_dropdown_categories( $args );
    }

    add_filter( \'wp_dropdown_cats\', \'wp_dropdown_categories_required\', 10, 2 );
    function wp_dropdown_categories_required( $output, $args ){
        if( ! isset( $args[\'required\'] ) || $args[\'required\'] != true )
            return $output;

        return preg_replace( 
            \'^\' . preg_quote( \'<select \' ) . \'^\', 
            \'<select required \', 
            $output 
        );
    }
祝你一切顺利。

结束