
在构建复杂的电子商务网站时,我们可能需要在 woocommerce 单产品页面提供多种“加入购物车”功能,例如一个标准的“加入购物车”按钮和一个用于“加入报价清单”的按钮。后者的核心需求是复制标准“加入购物车”按钮的所有功能(包括任何自定义的购物车商品数据处理),但点击后应重定向到特定的自定义页面,而不是默认的购物车页面。本文将详细介绍如何通过三个关键步骤实现这一功能。
首先,我们需要在现有“加入购物车”按钮的下方添加一个新的按钮。为了不直接修改 WooCommerce 模板文件,我们利用 WooCommerce 提供的动作钩子 (woocommerce_after_add_to_cart_button) 来插入我们的自定义按钮。这个新按钮将与原按钮具有相同的 name 和 value 属性(对于简单产品),以确保触发标准的加入购物车流程。关键在于为其添加一个独特的 CSS 类(例如 custom_redirect_button),以便后续通过 JavaScript 进行区分。
以下是添加新按钮的代码示例:
// 添加新的/额外的按钮
function action_woocommerce_after_add_to_cart_button() {
global $product;
// 按钮文本
$button_text = __( '加入报价清单', 'woocommerce' ); // 可以自定义文本
// 检查是否为 WooCommerce 产品
if ( is_a( $product, 'WC_Product' ) ) {
// 简单产品
if ( $product->is_type( 'simple' ) ) {
echo '<button type="submit" name="add-to-cart" value="'. esc_attr( $product->get_id() ) . '" class="single_add_to_cart_button button alt custom_redirect_button">' . $button_text . '</button>';
// 可变产品
} elseif( $product->is_type( 'variable' ) ) {
// 可变产品不需要value属性,因为其值由JS动态传递
echo '<button type="submit" class="single_add_to_cart_button button alt custom_redirect_button">' . $button_text . '</button>';
}
}
}
add_action( 'woocommerce_after_add_to_cart_button', 'action_woocommerce_after_add_to_cart_button', 10 );这段代码会在原“加入购物车”按钮之后插入一个新的提交按钮。对于简单产品,它会包含 name="add-to-cart" 和 value (产品ID),确保触发正常的加入购物车逻辑。对于可变产品,它仅复制按钮结构,value 会在表单提交时由 JavaScript 动态处理。最重要的是,我们为这个新按钮添加了 custom_redirect_button 类,这是我们后续识别它的关键。
由于两个按钮都触发相同的加入购物车机制,我们需要一种方式来区分是哪个按钮被点击了,以便应用不同的重定向逻辑。这可以通过 JavaScript (jQuery) 实现。当带有 custom_redirect_button 类的按钮被点击时,我们动态地向表单中添加一个隐藏的输入字段。
以下是添加 JavaScript 代码的示例:
// 将 jQuery 添加到页脚
function action_wp_footer() {
// 仅在单产品页面加载
if ( is_product() ) {
?>
<script type="text/javascript">
jQuery( function($) {
// 当自定义重定向按钮被点击时
$( document ).on( 'click', '.custom_redirect_button', function () {
// 确保按钮未被禁用
if ( ! $( this ).hasClass( 'disabled' ) ) {
// 在按钮后添加一个隐藏的输入字段
$( this ).after( '<input type="hidden" name="custom-redirect" value="my-value" />' );
}
});
});
</script>
<?php
}
}
add_action( 'wp_footer', 'action_wp_footer', 10 );这段 JavaScript 代码会在页面加载完成后执行。它监听所有带有 custom_redirect_button 类的按钮的点击事件。当这些按钮被点击且未被禁用时,它会在当前按钮之后插入一个隐藏的 zuojiankuohaophpcninput type="hidden" name="custom-redirect" value="my-value" /> 字段。这个字段的值 (my-value) 将在表单提交时随数据一起发送到服务器,作为我们区分按钮的标识符。
最后一步是利用 WooCommerce 的 woocommerce_add_to_cart_redirect 过滤器来根据我们添加的隐藏字段的值,条件性地修改重定向 URL。这个过滤器在产品成功加入购物车后触发,允许我们自定义用户将被重定向到的页面。
以下是实现自定义重定向逻辑的代码示例:
// 重定向
function filter_woocommerce_add_to_cart_redirect( $redirect_url, $product ) {
// 检查是否存在自定义重定向标识符
if ( isset( $_REQUEST['custom-redirect'] ) ) {
// 如果标识符的值与我们设定的值匹配
if ( $_REQUEST['custom-redirect'] == 'my-value' ) {
// 设置要重定向到的自定义 URL(例如,页面 ID 为 1 的页面)
// 请将 1 替换为您的目标页面 ID
$redirect_url = get_permalink( 1 );
}
}
return $redirect_url;
}
add_filter( 'woocommerce_add_to_cart_redirect', 'filter_woocommerce_add_to_cart_redirect', 10, 2 );这段 PHP 代码挂钩到 woocommerce_add_to_cart_redirect 过滤器。它首先检查 $_REQUEST 超全局变量中是否存在 custom-redirect 字段。如果存在且其值等于我们预设的 my-value,那么就意味着是我们的自定义按钮被点击了。此时,我们将 $redirect_url 修改为目标自定义页面的 URL(例如,通过 get_permalink(1) 获取 ID 为 1 的页面的永久链接)。
通过上述三个步骤,我们成功地在 WooCommerce 单产品页面上复制了一个“加入购物车”按钮,并为其赋予了自定义的重定向行为,同时完整保留了原始按钮的购物车处理逻辑。这种方法灵活且易于维护,是实现复杂电子商务功能的一个有效途径。
以上就是WooCommerce 单产品页复制“加入购物车”按钮并实现自定义重定向的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号