如何修改 WooCommerce 购物车、结帐页面(主题部分)

Posted

技术标签:

【中文标题】如何修改 WooCommerce 购物车、结帐页面(主题部分)【英文标题】:How to modify WooCommerce cart, checkout pages (main theme portion) 【发布时间】:2014-12-04 23:48:10 【问题描述】:

我一直在研究和调整我的自定义 Wordpress 主题和覆盖的 WooCommerce 模板,现在安装了 WooCommerce,以纠正 WooCommerce 页面上出现的一系列小格式问题。我到现在为止购物车和结帐,是的,他们使用cart.php(以及任何结帐php),但也使用主要的Wordpress主题page.php。我已经能够在其他地方使用 is_woocommerce() 条件句,但这里没有,因为我了解到 WooCommerce 文档说不能用于结帐和购物车。

is_woocommerce() - 如果在使用 WooCommerce 模板的页面上返回 true(购物车和结帐是带有简码的标准页面,因此不包括在内)。 http://docs.woothemes.com/document/conditional-tags/

那么我怎样才能改变这些页面的外观呢?我在顶部有一个“查看所有帖子”和一个日期/时间,以及 page.php 的类别侧边栏,出于明显的原因,我不想在结帐和购物车上显示它们,因为它们根本没有意义。我有哪些选择?

我可以让它使用 page.php 以外的其他模板吗?

这是一个选项吗?这是不好的做法......它是否会在每个页面上使用此循环导致更多负载?我把它放在哪里? http://saiyedfaishal.wordpress.com/2014/01/06/check-if-it-is-woocommerce-page/

解决此问题的最佳方法是什么?谢谢你的帮助! 这个问题有点相关 - How to modify woocommerce_before_cart action

【问题讨论】:

【参考方案1】:

另一种完全覆盖 cart.php 的方法是复制:

woocommerce/templates/cart/cart.php to   
yourtheme/woocommerce/cart/cart.php

然后在 yourtheme/woocommerce/cart/cart.php 做任何你需要的事情

【讨论】:

酷,很高兴知道,谢谢!实际上,我已经为archive-product.php 和single-product.php 做到了这一点。我主要关心的是使用主页.php 的 WooCommerce,尽管我猜这更棘手。【参考方案2】:

您可以使用函数:wc_get_page_id( 'cart' ) 来获取页面的 ID。此功能将页面设置用作“购物车”页面,而不是 slug。这意味着当您在设置页面上为“购物车”设置不同的 url 时,它也会继续工作。这适用于所有类型的 Woocommerce 特殊页面,例如“结帐”、“商店”等。

示例:

if (wc_get_page_id( 'cart' ) == get_the_ID()) 
  // Do something.

【讨论】:

谢谢!这是一个更好的解决方案。我把它放好了。 我会注意到 is_cart() 和 is_checkout() 是 WooCommerce 特有的,因此如果您停用/删除 WooCommerce,它们会破坏您的网站,因为您必须记住从您的主题中删除它们文件。【参考方案3】:

可以使用is_cart()条件标签:

if (! is_cart() ) 
  // Do something.

【讨论】:

【参考方案4】:

WooCommerce 有许多用于修改购物车和结帐页面的选项。以下是我推荐的三个:

使用WooCommerce Conditional Tags

is_cart()is_checkout() 函数在其页面上返回 true。示例:

if ( is_cart() || is_checkout() ) 
    echo "This is the cart, or checkout page!";

修改模板文件

主要的购物车模板文件位于wp-content/themes/current-theme/woocommerce/cart/cart.php

主要的结帐模板文件位于wp-content/themes/current-theme/woocommerce/checkout/form-checkout.php

要编辑这些,首先将它们复制到您的子主题中。

使用wp-content/themes/current-theme/page-slug.php

page-slug.php 是第二个将使用的模板,在通过 WP 仪表板手动分配模板之后。

这比我的其他解决方案更安全,因为如果您删除 WooCommerce,但忘记删除此文件,则内部代码(可能依赖于 WooCommerce 函数)不会中断,因为它从未被调用(除非您有带有 slug 的页面slug)。

例如:

wp-content/themes/current-theme/page-cart.php wp-content/themes/current-theme/page-checkout.php

【讨论】:

感谢您的回答。我只想指出 is_cart() 和 is_checkout() 是 WooCommerce 特有的,因此如果您停用/删除 WooCommerce,它们会破坏您的网站。我猜 page-cart.php 仅在主题特别具有支持 WooCommerce 的主题时才存在(例如,我的主题没有它)。如果您将该文件添加到您的主题中,它会使用该文件而不是 page.php 吗? 是的,完全正确。如果您愿意,请随时将其添加到答案中 page-slug.php 是第二个将使用的模板,在通过 wp 仪表板手动分配模板之后 很高兴知道。谢谢。【参考方案5】:

我发现这可以很好地作为 page.php 中的条件,包括 WooCommerce 购物车和结帐屏幕。

!is_page(array('cart', 'checkout'))

【讨论】:

回到这里...我发现这个解决方案的优点是它不使用 WooCommerce 特定的功能,因此如果您停用或删除 WooCommerce,它不会破坏您的网站。当您的网站的某些部分无法运行并且您必须记住您已将 WooCommerce 特定代码添加到某些主题文件中时,这是一个令人讨厌的惊喜。【参考方案6】:

我使用 page-checkout.php 模板来更改我的购物车页面的标题。我在 /wp-content/themes/childtheme/woocommerce/ 中将其重命名为 page-cart.php。这使您可以更好地控制包装 html、页眉和页脚。

【讨论】:

以上是关于如何修改 WooCommerce 购物车、结帐页面(主题部分)的主要内容,如果未能解决你的问题,请参考以下文章

无法将 woocommerce 购物车页面更改为结帐

Woocommerce 在结帐页面下订单后替换购物车中的产品

在 Woocommerce 购物车、结帐页面、订单和电子邮件通知中的产品标题上方显示品牌名称

更改 WooCommerce 迷你购物车小部件上的购物车和结帐按钮链接

从结帐页面 woocommerce 更新购物车中的产品

在 WooCommerce 的结帐时禁用 AJAX