欢迎参与有关掌握WooCommerce行动和过滤器系列的第二篇文章。在上一篇文章中,即使是非常基本的,我们也介绍了处理客户的账单和运输地址,以及客户通过WooCommerce注册时会发生什么,并将其发送到第三方网站,例如Salesforce。
>在第二篇文章中,我们将在使用WooCommerce创建电子商务网站时以一些巧妙的方式来操纵购物车。钥匙要点
>本文提供了有关如何使用操作和过滤器来操纵WooCommerce购物车的详细说明,包括以编程方式添加和删除产品,清空购物车以及建立激励产品系统。
- >以编程方式将产品添加到购物车中,只需要一行代码,但是在每个页面上执行的操作中不运行此产品,例如Template_redirect Action。
- >通过编程从购物车中删除产品比添加一个产品更为复杂。该代码通过购物车中的每种产品提供了周期,并删除了指定的产品。 >本文演示了如何使用WooCommerce_Proceed_to_checkout Action创建一个按编程清空的按钮。
- >本文提供了建立激励产品系统的现实情况,其中将产品提供给满足特定要求的客户,例如,订单的最低总额或特定类别的产品的最低总额。
- 在编程上添加产品
- >在编程中将产品添加到购物车中,只需采用一行代码。您要做的唯一头脑风暴是决定何时或为什么要这样做。当我们在现实世界中工作时,我们将在本文的第三部分中讨论更多。
- > 在购物车中添加产品所需的全部是以下内容:
>注意事项,请确保您不会在每个页面上运行的操作上运行此操作,例如Template_redirect操作,或者您将其中一种将这些产品添加到购物车中,每个页面负载或重新加载。尽可能避免这样做:
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span></span>
>从编程中删除产品
>我已经看到这个问题在各种论坛和网站中被问到了无数次,答案很少。希望这将帮助您下次要从购物车中删除产品时,唯一要做的集思广益是何时或为什么要从购物车中删除产品。以下代码将阻止任何人从您的商店中检查产品。我不知道为什么您想做这样的事情,但它将演示从购物车中删除产品的步骤,而该产品并不像我们在购物车中添加产品时那样简单。
><span><span><?php </span></span><span><span>// template_redirect runs once for every page so you'll be </span></span><span><span>// increasing the quantity by one on every page load </span></span><span><span>add_action( 'template_redirect', 'add_random_product' ); </span></span><span><span>function add_random_product() { </span></span><span> <span>WC()->cart->add_to_cart( 73, 1 ); </span></span><span><span>}</span></span></span>
>编程
清空购物车>更好地说明如何以编程方式清空购物车,让我们在购物车中添加一个按钮,这将允许客户单击并清除他们的购物车。

>让我们使用woocommerce_proceed_to_checkout操作回声我们自己的“提交”按钮,该按钮将为当前客户清除购物车。
<span><span><?php </span></span><span><span>add_action( 'template_redirect', 'remove_product_from_cart' ); </span></span><span><span>function remove_product_from_cart() { </span></span><span> <span>// Run only in the Cart or Checkout Page </span></span><span> <span>if( is_cart() || is_checkout() ) { </span></span><span> <span>// Set the product ID to remove </span></span><span> <span>$prod_to_remove = 56; </span></span><span> </span><span> <span>// Cycle through each product in the cart </span></span><span> <span>foreach( WC()->cart->cart_contents as $prod_in_cart ) { </span></span><span> <span>// Get the Variation or Product ID </span></span><span> <span>$prod_id = ( isset( $prod_in_cart['variation_id'] ) && $prod_in_cart['variation_id'] != 0 ) ? $prod_in_cart['variation_id'] : $prod_in_cart['product_id']; </span></span><span> </span><span> <span>// Check to see if IDs match </span></span><span> <span>if( $prod_to_remove == $prod_id ) { </span></span><span> <span>// Get it's unique ID within the Cart </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $prod_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>} </span></span><span><span>}</span></span></span>>下一步是收听要单击的按钮,以便单击时,我们清除购物车。为此,我们将挂接template_redirect动作。
>
<span><span><?php </span></span><span><span>add_action( 'woocommerce_proceed_to_checkout', 'insert_empty_cart_button' ); </span></span><span><span>function insert_empty_cart_button() { </span></span><span> <span>// Echo our Empty Cart button </span></span><span> <span>echo '<input type="submit" name="empty_cart" value="Empty Cart">'; </span></span><span><span>}</span></span></span>>您现在会注意到,按下按钮后,将显示Cart-empty.php而不是常规模板。
>现在我们已经建立了如何从购物车中添加或删除产品,甚至完全清空购物车,让我们继续构建现实世界中的情况,知道这种东西会产生很大的不同。

在现实世界的情况下,我们将通过构建一个系统来使所有这些产品都可以赠送产品作为激励所有客户,从而使所有这些工作都起作用。好吧,不完全是您所有的客户,只是那些根据特定要求资格的人。
>问题
我们需要能够将您选择的产品作为激励您的客户。
>构建一个系统,该系统将允许您根据以下内容赠送激励产品:
在购物车中具有特定产品
>
- 您的订单最低总金额
-
>
> 在您的购物车中具有最小重量 -
因为我们将以正确的方式构建它,不仅您能够将产品赠送给有资格符合这些标准之一的产品,而且您还可以将它们混合在一起并真正缩小谁得到了产品,谁没有。
>您不仅可以通过符合这些条件之一的资格为客户提供激励产品,而且还可以将它们组合起来。例如,例如,您可以测试其购物车至少100美元的人,而“服装”类别中的产品都可以测试。
>>让我们快速看一下我们将在一分钟内写的功能以及在问题/解决方案方案中所做的工作。
>- >
get_id_from_product($ product,$ check_variations = true) - 获取产品ID并将其返回。考虑变化ID,因此我们在检查实际产品ID之前检查这些ID。
>资格:basedon_specific_product($ product_required) - 检查客户是否通过将指定的产品ID作为购物车中的一项。
- >
>资格:$ basedon_weight($ weight_required) - 检查客户是否通过在购物车中具有最小的重量来符合激励措施。
> >
-
>资格:basedon_cart_total($ total_required) - 检查客户是否通过计算税收之前的最低总金额来符合激励措施。
> >资格符合_basedon_product_category($类别) - 检查客户是否通过从购物车中的某个类别中获得某个类别的产品来符合奖励。 - > add_incentive_to_cart($ product_id) - 如果客户有资格
,则将激励产品添加到购物车中 > emove_incentive_from_cart($ product_id) - 如果客户未能获得产品资格,则将激励产品删除到购物车中。 -
-
如您所见,这些功能返回“ true”或“ false”,因此它将使我们非常容易将其混合并创建一个非常灵活的激励程序。现在剩下要做的就是提出您要设定的规则,让客户有资格获得激励产品,并编写将与WooCommerce_Check_Cart_Items wooCommerce Action绑定的符合奖励_FOR_INCENTIVE()函数。
>
下面的 - 是一些示例,说明如何使用这些功能创建真正唯一的东西。
>
只有一个要求
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span></span>
>购物车中存在的特定产品
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span></span>
购物车中所有产品的最小重量>
<span><span><?php </span></span><span><span>// template_redirect runs once for every page so you'll be </span></span><span><span>// increasing the quantity by one on every page load </span></span><span><span>add_action( 'template_redirect', 'add_random_product' ); </span></span><span><span>function add_random_product() { </span></span><span> <span>WC()->cart->add_to_cart( 73, 1 ); </span></span><span><span>}</span></span></span>
购物车总数排除税款<span><span><?php </span></span><span><span>add_action( 'template_redirect', 'remove_product_from_cart' ); </span></span><span><span>function remove_product_from_cart() { </span></span><span> <span>// Run only in the Cart or Checkout Page </span></span><span> <span>if( is_cart() || is_checkout() ) { </span></span><span> <span>// Set the product ID to remove </span></span><span> <span>$prod_to_remove = 56; </span></span><span> </span><span> <span>// Cycle through each product in the cart </span></span><span> <span>foreach( WC()->cart->cart_contents as $prod_in_cart ) { </span></span><span> <span>// Get the Variation or Product ID </span></span><span> <span>$prod_id = ( isset( $prod_in_cart['variation_id'] ) && $prod_in_cart['variation_id'] != 0 ) ? $prod_in_cart['variation_id'] : $prod_in_cart['product_id']; </span></span><span> </span><span> <span>// Check to see if IDs match </span></span><span> <span>if( $prod_to_remove == $prod_id ) { </span></span><span> <span>// Get it's unique ID within the Cart </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $prod_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>} </span></span><span><span>}</span></span></span>
><span><span><?php </span></span><span><span>add_action( 'woocommerce_proceed_to_checkout', 'insert_empty_cart_button' ); </span></span><span><span>function insert_empty_cart_button() { </span></span><span> <span>// Echo our Empty Cart button </span></span><span> <span>echo '<input type="submit" name="empty_cart" value="Empty Cart">'; </span></span><span><span>}</span></span></span>
>由于我们有一个非常灵活的代码库,因此您可以将其混合并真正使您的激励计划与众不同。以下是更多示例,显示了必要的添加更多条件的容易。
>>来自购物车或最低购物车的类别的产品
类别和最低购物车的产品
><span><span><?php </span></span><span><span>// Let's wait for the button to be clicked on </span></span><span><span>add_action( 'template_redirect', 'empty_cart_button_handler' ); </span></span><span><span>function empty_cart_button_handler() { </span></span><span> <span>if( isset( $_POST['empty_cart'] ) && $_SERVER['REQUEST_METHOD'] == "POST" ) { </span></span><span> <span>WC()->cart->empty_cart( true ); </span></span><span> <span>} </span></span><span><span>}</span></span></span>
>您甚至可以比这更先进,并创建更复杂的方案。下一步的步骤是将其转变为“班级”,以便您可以拥有多个激励计划,每个计划都有自己的独特资格规则集。
><span><span><?php </span></span><span><span>/** </span></span><span><span> * Will extract the Variation ID if available otherwise it will get the Product ID </span></span><span><span> * <span>@param $product Product </span></span></span><span><span> * <span>@param <span>bool</span> $check_variations Whether or not to check for variation IDs </span></span></span><span><span> * <span>@return <span>mixed</span> </span></span></span><span><span> */ </span></span><span><span>function get_id_from_product( $product, $check_variations = true ) { </span></span><span> <span>// Are we taking variations into account? </span></span><span> <span>if( $check_variations ) { </span></span><span> <span>// Ternary Operator </span></span><span> <span>// http://php.net/manual/en/language.operators.comparison.php </span></span><span> <span>return ( isset( $product['variation_id'] ) </span></span><span> <span>&& ! empty( $product['variation_id']) </span></span><span> <span>&& $product['variation_id'] != 0 ) </span></span><span> <span>? $product['variation_id'] </span></span><span> <span>: $product['product_id']; </span></span><span> <span>} else { </span></span><span> <span>// No variations, just need the product IDs </span></span><span> <span>return $product['product_id']; </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the existence of a specific product in the cart </span></span><span><span> * <span>@param $product_required The Product ID required to be in the cart </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_specific_product( $product_required ) { </span></span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>foreach( WC()->cart->cart_contents as $key => $product_in_cart ) { </span></span><span> <span>if( $product_required == get_id_from_product( $product_in_cart ) ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart for the weight required to qualify for the incentive </span></span><span><span> * <span>@param $weight_required Weight Required </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_weight( $weight_required ) { </span></span><span> </span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>if( $weight_required >= WC()->cart->cart_contents_weight ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart for the Total excluding taxes </span></span><span><span> * <span>@param $total_required </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_cart_total( $total_required ) { </span></span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>if( WC()->cart->subtotal_ex_tax >= $total_required ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart to verify whether or not a product from a Category is in the cart </span></span><span><span> * <span>@param $category Accepts the Product Category Name, ID, Slug or array of them </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_product_category( $category ) { </span></span><span> <span>foreach( WC()->cart->cart_contents as $key => $product_in_cart ) { </span></span><span> <span>if( has_term( $category, 'product_cat', get_id_from_product( $product_in_cart, false ) ) ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Adds a specific product to the cart </span></span><span><span> * <span>@param $product_id Product to be added to the cart </span></span></span><span><span> */ </span></span><span><span>function add_incentive_to_cart( $product_id ) { </span></span><span> <span>// Check the cart for this product </span></span><span> <span>$cart_id = WC()->cart->generate_cart_id( $product_id ); </span></span><span> <span>$prod_in_cart = WC()->cart->find_product_in_cart( $cart_id ); </span></span><span> <span>// Add the product only if it's not in the cart already </span></span><span> <span>if( ! $prod_in_cart ) { </span></span><span> <span>WC()->cart->add_to_cart( $product_id ); </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Removes a specific product from the cart </span></span><span><span> * <span>@param $product_id Product ID to be removed from the cart </span></span></span><span><span> */ </span></span><span><span>function remove_incentive_from_cart( $product_id ) { </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $product_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span><span>}</span></span></span>
就是本文。在本系列的第三部分中,我们将使用在新产品/编辑产品屏幕上运行的操作和过滤器。然后,我们将探索如何使用API来添加自定义字段。>关于WooCommerce行动和过滤器的常见问题(常见问题解答)
> woocommerce操作和过滤器之间有什么区别?>动作和过滤器是WooCommerce中的两种类型的挂钩。操作允许您添加或更改功能,例如将新部分添加到您的网站或修改结帐过程。另一方面,过滤器允许您在WooCommerce中修改数据。例如,您可以使用过滤器更改产品的价格或修改按钮的文本。>
如何在WooCommerce Cart中添加自定义字段?自定义字段到WooCommerce购物车,您可以使用'woocommerce_cart_item_data'过滤器。该过滤器允许您将自定义数据添加到购物车项目。然后,您可以使用'woocommerce_get_item_data'过滤器在购物车中显示此自定义数据。>如何修改WooCommerce结帐过程? >>和过滤器。例如,您可以使用'woocommerce_checkout_fields'过滤器修改结帐字段或'woocommerce_checkout_process'操作将自定义验证添加到结帐过程中。
>我可以使用钩子修改WooCommerce Emails吗?是的,WooCommerce提供了几个挂钩,可让您修改WooCommerce发送的电子邮件。例如,您可以使用“ woocommerce_email_header”和“ woocommerce_email_footer”操作来修改电子邮件的标题和页脚,或“ woocommerce_email_email_order_details”的操作来修改电子邮件中的订单详细信息。
如何更改WooCommerce中的按钮的文本?
更改WooCommerce中按钮的文本,您可以使用'woocommerce_order_order_button_text'过滤器。该过滤器允许您修改结帐页面上的“订单”按钮的文本。
如何将自定义消息添加到woocommerce购物车页面?
您可以将自定义消息添加到使用“ WooCommerce_before_cart”操作的WooCommerce购物车页面。此操作使您可以在购物车内容之前添加自定义内容。>我可以使用钩子修改WooCommerce产品页面吗?>要修改WooCommerce中的订单详细信息,您可以使用'woocommerce_order_details_after_oder_order_table'action'操作。此操作允许您在订单详细信息页面上的订单表之后添加自定义内容。我可以使用钩子将自定义字段添加到WooCommerce Checkout页面吗? 'WooCommerce_Checkout_fields'过滤器将自定义字段添加到WooCommerce的结帐页面。该过滤器允许您修改结帐字段,包括添加新字段。>我如何使用挂钩?>如何更改产品中的产品价格以更改WooCommerce中产品的价格,您可以使用'woocommerce_get_price_html'过滤器。该过滤器允许您修改价格HTML,其中包括产品的价格。 - >
以上是WooCommerce行动和过滤操作购物车的详细内容。更多信息请关注PHP中文网其他相关文章!

在 WordPress 网站上启用评论功能,可以为访客提供参与讨论和分享反馈的平台。为此,请按照以下步骤操作:启用评论:在仪表盘中,导航至“设置”>“讨论”,并选中“允许评论”复选框。创建评论表单:在编辑器中,单击“添加块”并搜索“评论”块,将其添加到内容中。自定义评论表单:通过设置标题、标签、占位符和按钮文本来定制评论块。保存更改:单击“更新”以保存评论框并将其添加到页面或文章中。

如何复制 WordPress 子站?步骤:在主站创建子站。在主站克隆子站。将克隆导入目标位置。更新域名(可选)。分开插件和主题。

在WordPress中创建自定义页头的步骤如下:编辑主题文件“header.php”。添加您的网站名称和描述。创建导航菜单。添加搜索栏。保存更改并查看您的自定义页头。

WordPress 网站中启用评论功能:1. 登录管理面板,转到 "设置"-"讨论",勾选 "允许评论";2. 选择显示评论的位置;3. 自定义评论表单;4. 管理评论,批准、拒绝或删除;5. 使用 <?php comments_template(); ?> 标签显示评论;6. 启用嵌套评论;7. 调整评论外形;8. 使用插件和验证码防止垃圾评论;9. 鼓励用户使用 Gravatar 头像;10. 创建评论指

可以通过 WordPress 安装 FTP 插件,配置 FTP 连接,然后使用文件管理器上传源码。步骤包括:安装 FTP 插件、配置连接、浏览上传位置、上传文件、检查上传成功。

如何复制 WordPress 代码?从管理界面复制:登录 WordPress 网站,导航到目标位置,选择代码并按 Ctrl C (Windows)/Command C (Mac) 复制代码。从文件复制:使用 SSH 或 FTP 连接到服务器,导航到主题或插件文件,选择代码并按 Ctrl C (Windows)/Command C (Mac) 复制代码。

WordPress 错误解决指南:500 内部服务器错误:禁用插件或检查服务器错误日志。404 未找到页面:检查 permalink 并确保页面链接正确。白屏死机:增加服务器 PHP 内存限制。数据库连接错误:检查数据库服务器状态和 WordPress 配置。其他技巧:启用调试模式、检查错误日志和寻求支持。预防错误:定期更新 WordPress、仅安装必要插件、定期备份网站和优化网站性能。

如何在 WordPress 中关闭评论?特定文章或页面:在编辑器中取消选中“讨论”下的“允许评论”。整个网站:在“设置”->“讨论”中取消选中“允许发表评论”。使用插件:安装 Disable Comments 等插件禁用评论。编辑主题文件:通过编辑 comments.php 文件移除评论表单。自定义代码:使用 add_filter() 函数禁用评论。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1
功能强大的PHP集成开发环境

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。