【问题标题】:How to change position of woocommerce "added to cart" message如何更改 woocommerce“已添加到购物车”消息的位置
【发布时间】:2015-09-15 10:31:49
【问题描述】:

我正在使用woocommerce version 2.3.13,我想更改woocommerce messages 的位置,例如“产品已成功添加到购物车”,当我单击“添加到购物车”按钮时,它会显示在产品页面的顶部。

我希望这条消息出现在其他地方。

我已经厌倦了包括this在内的许多解决方案,方法是删除'woocommerce_before_single_product'钩子上的'woocommerce_show_messages'

代码remove_action( 'woocommerce_before_single_product', 'woocommerce_show_messages' );

然后在我希望消息出现但没有运气的地方调用woocommerce_show_messages(); 函数。

请在这方面帮助我。

编辑:

我忘了提到我正在使用店面主题并为单个产品使用自定义模板。

这些消息默认显示在页面顶部。

【问题讨论】:

  • 嗨@CodePoet你找到解决方案了吗? (我正在使用 WooCommerce 3+ 顺便说一句)

标签: plugins wordpress woocommerce


【解决方案1】:

“产品已成功添加到购物车”消息是 woocommerce 通知。 这些消息由函数打印

    <?php wc_print_notices(); ?>

尝试改变这个函数在模板中的位置。

通过钩子添加通知

add_action( 'woocommerce_before_shop_loop', 'wc_print_notices', 10 );
add_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 );

STOREFRONT 主题编辑: ** 适用于 Woocoommerce:3.1.2 + 店面:2.2.5 **

在店面主题中,wc_print_noticesstorefront_content_top 挂钩

所以要从店面主题的顶部删除消息,您需要在 functions.php 中添加以下代码

remove_action( 'woocommerce_before_shop_loop', 'wc_print_notices', 10 ); /*Archive Product*/
remove_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 ); /*Single Product*/
remove_action( 'storefront_content_top', 'storefront_shop_messages', 1 );

并添加功能

wc_print_notices();

通知出现在任何地方。

编辑:消息不会出现在单个产品页面和存档产品页面上。尽管它们可能出现在任何其他 woocommerce 页面(购物车、结帐等)上。

【讨论】:

  • 这是正确的。通知不是通过钩子添加的,而是直接调用的。
  • 可以通过钩子添加通知add_action( 'woocommerce_before_shop_loop', 'wc_print_notices', 10 ); add_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 );
  • 他们肯定 可以 是,但正如你指出的那样,有些地方直接调用了函数。其实我之前弄错了,他们添加到woocommerce_before_single_productwoocommerce_before_shop_loop。似乎主要是直接调用函数的短代码和 ajax 回调。
  • @Akash K。实际上我希望消息出现在产品页面中间的某个位置,目前它出现在页面顶部(甚至在面包屑之前)。请注意,我正在为单个产品使用店面主题和自定义模板。
  • wc_print_notices 操作实际上已挂接到 'woocommerce_before_single_product... 使用 remove_action 从该操作中取消挂钩功能,并且无论您希望通知出现在模板中的哪个位置,只需调用 wc_print_notices()模板本身。
【解决方案2】:

这对我有用(WooCommerce 3.2+)(基于@LoicTheAztec 的this answer

add_action( 'wp_head', 'reposition_sf_messages' );
function reposition_sf_messages(){
    if( is_product() ) {
        remove_action( 'storefront_content_top','storefront_shop_messages',15 );
    }
    remove_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 ); /*Single Product*/
    add_action('woocommerce_product_meta_end', 'storefront_shop_messages', 1 );
}

【讨论】:

    【解决方案3】:

    如果有人仍然在这里寻找解决方案。

    你可以使用类似
    remove_action( 'woocommerce_before_single_product', 'woocommerce_output_all_notices', 10 );

    现在将此代码放在您要显示通知的位置。
    &lt;?php wc_print_notices(); ?&gt;

    【讨论】:

      【解决方案4】:

      你试过了吗:

      remove_action( 'woocommerce_before_single_product', 'woocommerce_show_messages' );
      add_action( 'woocommerce_after_single_product', 'woocommerce_show_messages', 15 );
      

      这里third parameterpositioning priority

      【讨论】:

      • 是的,我已经厌倦了这个,但它不适用于我的情况。请查看我的编辑可能会清除情况,您可以轻松指出解决方案。
      • 我希望这个link有一些指导,它说明了第四个参数,第三个被归类为priority
      【解决方案5】:

      我认为这会对你有所帮助............

      add_action('woocommerce_before_my_page', 'wc_print_notices', 10);
      

      现在转到您希望显示消息的页面,然后添加

      <?php
            do_action( 'woocommerce_before_my_page' );
      ?>
      

      【讨论】:

      • 感谢您的回复...但这不起作用。请查看我的编辑可能会清除这种情况。
      【解决方案6】:

      这是在主题的functions.php中添加的完整代码。

      function move_woocommerce_message(){
        remove_action( 'woocommerce_before_single_product', 'wc_print_notices', 10 );
        add_action( 'woocommerce_single_product_summary', 'wc_print_notices', 35 );  
      }
      add_filter('wp', 'move_woocommerce_message');
      

      【讨论】:

        猜你喜欢
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 1970-01-01
        相关资源
        最近更新 更多