WooCommerce在成功消息上添加数据属性以查看购物车按钮

时间:2016-05-28 20:53:56

标签: php wordpress wordpress-plugin woocommerce add-filter

我已成功更改成功消息上查看购物车按钮的html标记,因此我可以向其添加id="open_cart",但我还想添加数据属性,例如作为html输出的data-cart="open",但只返回id

有关如何向其添加data-属性的任何想法?

function my_add_to_cart_message() {
    if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) :

    $message = sprintf( '%s<a id="open_cart" data-target="open-cart"  href="%s" class="button">%s</a>', __( 'Successfully added to cart.' , 'woocommerce' ), esc_url( get_permalink( woocommerce_get_page_id( 'cart' ) ) ), __( 'View Cart', 'woocommerce' ) );

    return $message;

}
add_filter( 'wc_add_to_cart_message', 'my_add_to_cart_message' );

这是上面的函数返回的内容:

<a id="open_cart" href="http://example.com/cart/" class="button wc-forward">Ver carrinho</a>

忽略data-cart="open"。简直烦人。

1 个答案:

答案 0 :(得分:1)

这里有一个快速解释为什么会发生这种情况。

查看Woocommerce success.php 模板,该模板负责显示成功消息。

<?php foreach ( $messages as $message ) : ?>
    <div class="woocommerce-message"><?php echo wp_kses_post( $message ); ?></div>
<?php endforeach; ?>

wp_kses_post()函数通过检查允许的标记和属性来清理 $ message 变量的输出。

这是您的解决方案:

将此代码段添加到您的functions.php

function my_filter_allowed_html($allowed, $context){
    if (is_array($context)) {
        return $allowed;
    }

    if ($context === 'post') { 
        $allowed['a']['data-cart'] = true;
    }

    return $allowed;
}
add_filter('wp_kses_allowed_html', 'my_filter_allowed_html', 10, 2);

您需要加入 wp_kses_allowed_html 过滤器并添加您的数据属性,以便 wp_kses_post()功能不会过滤掉它。