函数返回文本而不是html

时间:2019-03-01 作者:yourbudweiser

我使用此功能将价格添加到WooCommerce变体下拉菜单中。我试图用span标记来包装价格,但它将标记显示为文本。

add_filter( \'woocommerce_variation_option_name\',\'display_price_in_variation_option_name\');
function display_price_in_variation_option_name( $term ) {
    global $product;
    if ( empty( $term ) ) {
        return $term;
    }
    if ( empty( $product->get_id() ) ) {
        return $term;
    }
    $variation_id = $product->get_children();
    foreach ( $variation_id as $id ) {
        $_product       = new WC_Product_Variation( $id );
        $variation_data = $_product->get_variation_attributes();
        foreach ( $variation_data as $key => $data ) {
            $display_price = \'\';
            switch ($id) {
                case 1:
                    $display_price = $_product->get_price() / 12;
                    break;
                case 2:
                    $display_price = $_product->get_price();
                    break;
                case 3:
                    $display_price = $_product->get_price() / 6;
                    break;
                default:
            }           
            if ( $data == $term ) {
                $html = $term;
                $html .= \'<span>\' . $display_price . \'</span>\';
                return $html;
            }
        }
    }
    return $term;
}

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

无法在其中添加HTML<option> 变体下拉列表使用的标记。这是无效的HTML。

Permitted content 文本,可能包含转义字符(如é;)。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option

SO网友:phatskat

除了雅各布的回答,如果你看看woocommerce_variation_option_name 过滤器应用于WooCommerce,您可以看到:

<?php echo esc_html( apply_filters( \'woocommerce_variation_option_name\', $option->name ) ); ?>
这意味着任何HTML都是通过esc_html, 所以< 成为&lt;, 等