下拉列表中的发货方法,而不是单选按钮

时间:2020-03-27 作者:Kevin S

我有一个很长的发货方式列表,由于单选按钮中显示了发货方式,因此页面看起来很难看。有没有办法将其从单选按钮更改为下拉选项?

我试过换衣服

<ul id="shipping_method" class="woocommerce-shipping-methods">
    <?php foreach ( $available_methods as $method ) : ?>
        <li>
            <?php
            if ( 1 < count( $available_methods ) ) {
                printf( \'<input type="radio" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" %4$s />\', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ), checked( $method->id, $chosen_method, false ) ); // WPCS: XSS ok.
            } else {
                printf( \'<input type="hidden" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" />\', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ) ); // WPCS: XSS ok.
            }
            printf( \'<label for="shipping_method_%1$s_%2$s">%3$s</label>\', $index, esc_attr( sanitize_title( $method->id ) ), wc_cart_totals_shipping_method_label( $method ) ); // WPCS: XSS ok.
            do_action( \'woocommerce_after_shipping_rate\', $method, $index );
            ?>
        </li>
    <?php endforeach; ?>
</ul>

<select id="shipping_method" class="woocommerce-shipping-methods">
    <?php foreach ( $available_methods as $method ) : ?>
        <?php
        if ( 1 < count( $available_methods ) ) {
            printf( \'<option name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" %4$s />%6$s</option>\', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ), checked( $method->id, $chosen_method, false ), esc_attr( sanitize_title( $method->id ) ), wc_cart_totals_shipping_method_label( $method ) ); // WPCS: XSS ok.
        } else {
            printf( \'<input type="hidden" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" />\', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ) ); // WPCS: XSS ok.
        }
        // printf( \'<label for="shipping_method_%1$s_%2$s">%3$s</label>\', $index, esc_attr( sanitize_title( $method->id ) ), wc_cart_totals_shipping_method_label( $method ) ); // WPCS: XSS ok.
        do_action( \'woocommerce_after_shipping_rate\', $method, $index );
        ?>
    <?php endforeach; ?>
</select>
woocommerce/cart/cart-shipping.php 但这似乎不起作用。

1 个回复
SO网友:Dark House Development

我相信你还没有找到答案,因为这几乎是1年前的一天,但对于任何像我这样在谷歌搜索中遇到这个问题的人来说,试图找到一个不需要使用其他插件的好解决方案,这里是可行的解决方案。

echo 1 < count( $available_methods ) ? \'<select id="shipping_method_0" data-index="0" name="shipping_method[0]" class="woocommerce-shipping-methods shipping_method">\' : \'\'; 
    foreach ( $available_methods as $method ) : 
        if ( 1 < count( $available_methods ) ) {
            printf( \'<option id="shipping_method_%1$d_%2$s" value="%3$s" %4$s >%5$s</option>\', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ), ( $method->id == $chosen_method ? "selected" : "" ), wc_cart_totals_shipping_method_label( $method ) ); // WPCS: XSS ok.
        } else {
            printf( \'<input type="hidden" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" />\', $index, esc_attr( sanitize_title( $method->id ) ), esc_attr( $method->id ) ); // WPCS: XSS ok.
        }
        do_action( \'woocommerce_after_shipping_rate\', $method, $index );
    endforeach; 
echo 1 < count( $available_methods ) ? \'</select>\' : \'\'; 
在我的解决方案如何修复OP最初尝试的一些问题时,需要注意以下几点:

我只在有多个可用的装运方法的情况下添加主容器,否则,当代码尝试输出装运方法的隐藏字段时,这将创建HTML错误

  • 您需要将checked()函数替换为一个简单的if语句,检查$selected\\u方法是否与当前的$方法匹配->;id,如果确实添加了选定属性
  • 我希望这对以后找到它的人有所帮助!

    相关推荐