【问题标题】:WordPress dropdown multiselect optionWordPress下拉多选选项
【发布时间】:2015-05-17 19:05:18
【问题描述】:

我有以下 WordPress 下拉单选选项的代码。 我想让这段代码与多项选择选项一起工作,但不知道如何。 请给出解决方案。

<?php 
        $args=array(
                'class'       => 'select-submit2',
                'hide_empty'  => false,
                'selected'    => $prop_action_category_selected,
                'name'        => 'prop_action_category',
                'id'          => 'prop_action_category_submit',
                'orderby'     => 'NAME',
                'order'       => 'ASC',
                'show_option_none'   => __('None','wordpress'),
                'taxonomy'    => 'property_action_category',
                'hierarchical'=> true
            );

           wp_dropdown_categories( $args );  ?>

亲切的问候

尼科莱塔

【问题讨论】:

  • 来自here,您可以使用wp_category_checklist。你试过吗?
  • 是的,我读过这篇文章,但无法处理,你能解释一下

标签: php wordpress select multi-select bootstrap-multiselect


【解决方案1】:

根据docs,您需要改用wp_category_checklist()。但是,如果您需要更脏的解决方案,这应该会有所帮助:

$dropdown = wp_dropdown_categories($args);
$dropdown = str_replace('id=', 'multiple="multiple" id=', $dropdown);

【讨论】:

  • 感谢您的帮助
【解决方案2】:

wp_dropdown_categories() 函数是一个 WordPress 函数,用于创建类别下拉列表。您可以根据将各种参数传递给函数来指定输出的方式和内容。

但是,该函数不接受将其从单选列表更改为多选列表的参数。

一个简单的方法是在函数生成后改变它给你的输出。这并不总是解决所有问题的最佳方法,但在这种情况下,有两个关键因素使这种方法变得简单:

  1. 虽然该函数默认回显(打印)其输出,但它接受一个参数来简单地返回 HTML 结果而不输出它(允许您在显示之前对其进行更改)。
  2. 将下拉列表更改为多选列表就像在 HTML 标记中添加“多个”一样简单(即将 &lt;select&gt; 更改为 &lt;select multiple&gt;

您可以调用该函数,在输出结果之前将结果放入变量中,然后在该结果上使用 PHP 的 str_replace() 将“多个”滑入选择标记:

/**
 * Your args from the question
 * plus turning echo off.
 * Note the change to the name (adding "[]")
 */
$args = array(
    'class'       => 'select-submit2',
    'hide_empty'  => false,
    'selected'    => $prop_action_category_selected,
    'name'        => 'prop_action_category[]',
    'id'          => 'prop_action_category_submit',
    'orderby'     => 'NAME',
    'order'       => 'ASC',
    'show_option_none'   => __('None','wpestate'),
    'taxonomy'    => 'property_action_category',
    'hierarchical'=> true,
    'echo'        => 0,
);

/** get the dropdown **/
$dropdown = wp_dropdown_categories( $args );

/** insert "multiple" using str_replace **/
$multi = str_replace( '<select', '<select multiple ', $dropdown );

/** output result **/
echo $multi;

传递“0”的“echo”参数告诉函数不要输出任何东西(根据需要向数组添加任何其他参数)。然后在结果上运行str_replace(),结果就是你输出的结果。

请注意,您需要更改“名称”参数以传递一个数组,以便能够传递/获取所有选定的项目。

【讨论】:

  • 该函数默认回显其结果,因此您需要确保您的 $args 包含设置 echo=0。例如 - $dropdown = wp_dropdown_categories(array('echo'=>0));否则,结果将在 str_replace 运行之前输出。
  • 我使用下面的代码,它没有显示结果“空多选字段” 'select-submit2', 'echo' => '0 ', ); wp_dropdown_categories($args); ?> 0)); $multi = str_replace('
  • 你有点跑题了。我编辑了答案中的示例,希望更清楚 - 添加 cmets 和您在原始问题中的 $args。
  • 谢谢,我已经尝试在下拉列表中选择两个或多个值并按下提交按钮的示例,但不幸的是系统只保存了一个值。
【解决方案3】:

以一种简单而强大的方式,只需将此代码添加到您的 functions.php 文件中

add_filter( 'wp_dropdown_cats', 'wp_dropdown_cats_multiple', 10, 2 );

function wp_dropdown_cats_multiple( $output, $r ) {

    if( isset( $r['multiple'] ) && $r['multiple'] ) {

         $output = preg_replace( '/^<select/i', '<select multiple', $output );

        $output = str_replace( "name='{$r['name']}'", "name='{$r['name']}[]'", $output );

        foreach ( array_map( 'trim', explode( ",", $r['selected'] ) ) as $value )
            $output = str_replace( "value=\"{$value}\"", "value=\"{$value}\" selected", $output );

    }

    return $output;
}

并添加多个参数,如下所示:

<div class="ci-select">
    <?php
        wp_dropdown_categories( array(
            'taxonomy'          => 'property_location',
            'hierarchical'      => true,
            'show_option_none'  => esc_html_x( '-', 'any property location', 'ci_theme' ),
            'option_none_value' => '',
            'name'              => 's_property_location',
            'id'                => 'property_location',
            'selected'          => isset( $_GET['s_property_location'] ) ? $_GET['s_property_location'] : '', // e.x 86,110,786
            'multiple'          => true
        ) );
    ?>
</div>

【讨论】:

  • 这是一个很好的方法,但是对于那些不知道你在做什么以及为什么不知道的人来说,它需要更多的澄清/解释。
猜你喜欢
  • 2018-12-28
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2019-04-03
  • 1970-01-01
相关资源
最近更新 更多