仅允许访客在 WooCommerce 中结帐特定产品

2024-01-07

以下代码将自定义字段添加到管理产品设置,以在产品级别管理访客结账:

// Display Guest Checkout Field

add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
    global $woocommerce, $post;
  
    echo '<div class="options_group">';
  
    // Checkbox
    woocommerce_wp_checkbox( array( 
        'id'            => '_allow_guest_checkout', 
        'wrapper_class' => 'show_if_simple', 
        'label'         => __('Checkout', 'woocommerce' ), 
        'description'   => __('Allow Guest Checkout', 'woocommerce' ) 
    ) );

  
    echo '</div>';
}

// Save Guest Checkout Field
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
    $woocommerce_checkbox = isset( $_POST['_allow_guest_checkout'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_allow_guest_checkout', $woocommerce_checkbox );
}

// Enable Guest Checkout on Certain products
add_filter( 'pre_option_woocommerce_enable_guest_checkout', 'enable_guest_checkout_based_on_product' );
function enable_guest_checkout_based_on_product( $value ) {
    if ( WC()->cart ) {
        $cart = WC()->cart->get_cart();
        foreach ( $cart as $item ) {
            if ( get_post_meta( $item['product_id'], '_allow_guest_checkout', true ) == 'yes' ) {
                $value = "yes";
            } else {
                $value = "no";
                break;
            }
        }
    }
    return $value;
}

但实际上行不通。我做错了什么?我该如何修复它?

我正在尝试允许客人购买特定产品。管理自定义字段显示和保存自定义字段值正在工作(第2个功能),但登录/注册永远不会出现在结帐页面上,即使购物车中有不允许访客结帐的产品。


过滤钩enable_guest_checkout_based_on_product不再存在并已被另一个有点不同的钩子取代。

所以你的代码将是:

add_filter( 'woocommerce_checkout_registration_required', 'change_tax_class_user_role', 900 );
function change_tax_class_user_role( $registration_required ) {
    if ( ! WC()->cart->is_empty() ) {
        $registration_required = false; // Initializing (allowing guest checkout by default)
        
        // Loop through cart items
        foreach ( WC()->cart->get_cart() as $item ) {
            // Check if there is any item in cart that has not the option "Guest checkout allowed"
            if ( get_post_meta( $item['product_id'], '_allow_guest_checkout', true ) !== 'yes' ) {
                return true; // Found: Force checkout user registration and exit
            }
        }
    }
    return $registration_required;
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该有效。

相关延续: WooCommerce 中允许非结帐客人重定向 https://stackoverflow.com/questions/64331313/redirection-for-non-checkout-guest-allowed-in-woocommerce/64336443#64336443

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅允许访客在 WooCommerce 中结帐特定产品 的相关文章

  • PHP 用星号替换所有字符

    假设我有一个字符串形式的密码 password thisisaplaintextpassword 我怎样才能把它变成下面的样子 password 我想通过电子邮件向用户发送他们的帐户详细信息 但不想发送整个内容 Use 字符串重复 http
  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应
  • PHPExcel下载文件

    我想下载使用 PHPExcel 生成的 Excel 文件 我按照以下代码PHPExcel 强制下载问题 https stackoverflow com questions 26265108 phpexcel force download i
  • php表格:每行显示3个单元格[重复]

    这个问题在这里已经有答案了 我看这里 数组放入每行 5 个单元格的表格中 https stackoverflow com questions 9099568 array into a table with 5 cells in each r
  • 在 PHP 中将 CSV 写入不带括号的文件

    是否有本机函数或实体类 库用于将数组写入 CSV 文件中的一行而无需封装 fputcsv将默认为 如果没有为封装参数传入任何内容 谷歌让我失望了 返回一大堆有关的页面的结果 fputcsv PEAR 的库做的事情或多或少与fputcsv 工
  • 按类别 ID 获取产品

    我正在为 woocommerce 编写一个定价表插件 用户插入带有 woocommerce 产品类别 ID 的短代码 更新页面后 用户可以看到一个包含产品名称和价格列表的表格 我怎样才能获得带有类别ID的产品列表 在下面的代码中 pid是用
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 使用 PHP 将值插入可编辑 PDF,并保持可编辑状态

    我有一个带有可编辑字段的 PDF 我希望将 HTML 表单中的值传递到此 PDF 中 我尝试过使用 FPDF 并且它有效 但是将值传递到 PDF 后 pdf 中的字段不再可编辑 另一个缺点是 在将值传递到 PDF 时 我们必须为每个字段指定
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • TOMCAT 6 中的 PHP - 异常

    我一直在努力融入PHP in APACHE TOMCAT 6依照指示second answer为了QUESTION https stackoverflow com questions 779246 run a php app using t
  • 如何以编程方式获取 WooCommerce 中的所有产品?

    我想获取 WooCommerce 中的所有产品数据 产品 sku 名称 价格 库存数量 可用性等 我可以使用 wp query 来做到这一点吗 这样你就可以通过 wp query 获取所有产品 global wpdb all product
  • 使用 PHP 的 Google Glass GDK 身份验证

    我正在尝试点击此链接来验证 GDK 中的用户 https developers google com glass develop gdk authentication https developers google com glass de
  • AWS S3 上传的图像已损坏

    我正在 AWS ec2 ubuntu 机器上工作 我的代码在 cakephp 中 当我尝试将任何图像上传到 AWS S3 时 它都会损坏 虽然它在核心 php 代码中运行良好 这是我的控制器代码 if this gt User gt sav
  • 使用 DOJO 自动完成文本框

    我正在寻找一种使用 DOJO 进行文本框自动建议的简单方法 我将查询的数据库表 使用 PHP 脚本 以 JSON 形式返回 有超过 100 000 条记录 因此这确实不应该采用 FilteringSelect 或 ComboBox 的形式
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 如何在html中制作多行类型的文本框?

  • php下拉菜单人口

    我正在尝试编写一个 php 脚本 该脚本将根据主下拉菜单的选择填充第二个下拉菜单 我想使用 jquery 来完成所有非页面刷新的事情 但我发现现有的所有东西都很难理解和修改 你知道有什么写得很好且易于理解的东西吗 或者可能是现有的教程 下面
  • 检查文件权限

    我怎样才能检查file permissions 无需通过运行操作系统特定命令passthru or exec Use 文件权限 http php net fileperms功能 clearstatcache echo substr spri
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将

随机推荐

  • Laravel date 不允许我使用 diffForHumans

    我的表设置了时间戳字段 用于在字段中创建和更新 在我的模型中 我这样做 protected dates created at updated at 但是当调用日期时 p gt created at gt diffForHumans I ge
  • TypeScript 泛型在柯里化时不适用于先前的函数,如何处理?

    我有一个咖喱版本map处理承诺 它需要两个参数 一次一个 它需要两个类型参数来让调用者提供无法推断的部分 然而 实际上 调用者总是必须提供它们 因为在它们传入的转换函数中不会推断类型 该函数如下所示 description Like ram
  • Celery工人挂起,没有任何错误

    我有一个用于运行 celery 工作人员的生产设置 用于向远程服务发出 POST GET 请求并存储结果 它每 15 分钟处理大约 20k 任务的负载 问题是工人们无缘无故地变得麻木 没有错误 没有警告 我也尝试过添加多处理 结果相同 在日
  • 通过 getRealPath() 将上传的文件写入磁盘时出现 java.io.FileNotFoundException

    Glassfish 似乎在我也想保存图像文件的路径中添加了额外的内容 是否有某种方法可以仅使用我的 servlet 获得的绝对路径 String appPath request getServletContext getRealPath 我
  • CouchDB 查询性能

    如果文档数量越多 CouchDB 中数据查询是否会变慢 示例场景 我有一个用于客户名称表单的组合框 当用户输入客户名称时 我必须进行自动填充 CouchDB 中将有大约 10k 个客户文档 我知道我必须创建一个视图才能执行相同的操作 Cou
  • DacPac 错误太大 - 但我的文件只有 406kb

    我正在尝试将我的数据库上传到 SQL Azure 我已创建 DCA 包并开始上传过程 但是 我立即收到以下错误 指定的 DacPac 太大 允许的最大 DacPac 大小为 5242880 字节 我不明白为什么上传文件为 406KB 时会出
  • iOS:删除 UINavigationBar 动画

    我们的应用程序有一个 UINavigationBar 上面有图像 当我们转到 推送 到另一个屏幕然后单击后退按钮时 导航栏上的图像在重新出现时似乎会从左到右进行动画处理 这有点让人分心 如何删除这个后退按钮动画 我们尝试更改 segue A
  • 抽屉导航在 Windows Phone 8.1 中有时无法工作[RT] [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用抽屉布局找到代码msdn https code msdn microsoft com windowsapps Windows
  • .NET Core 2.0 中 IServiceCollection 缺少扩展方法 AddJwtBearerAuthentication()

    我已使用以下说明将我的项目从 Core 1 1 更新到 Core 2 0https blogs msdn microsoft com webdev 2017 08 14 announcing asp net core 2 0 https b
  • 如何使用 AWS AppSync 进行无服务器开发?

    我有一个关于开发无服务器应用程序的一般性问题AWS 应用程序同步 https aws amazon com appsync 尤其 我们正在考虑为一个小项目采用无服务器 我想知道人们在创建 无服务器 应用程序时通常如何设置他们的开发环境 我已
  • 调整

    我有一个包含子菜单的菜单 它的 HTML 源代码如下所示 ul li a href Menu 1 a ul li a href Item 1 a a a li li a href Subitem 1 a ul li a href Subsu
  • 是否可以在 Typescript 中定义非空数组类型?

    我有一个数字列表 我知道这些数字永远不会为空 是否可以在 Typescript 中定义一个永远不为空的数组 我知道像这样的元组是可能的 number number 但这不起作用 因为我的数组可以是任何大小 我想我正在寻找的是NonEmpty
  • 无法计算 Vim 中的匹配数

    如何计算 Vim 中的匹配数 例如 对于文本
  • 谷歌大查询中行之间的差异

    我目前正在尝试计算谷歌大查询中行之间的差异 我实际上有一个有效的查询 SELECT id record time level lag level lag as diff FROM SELECT id record time level LA
  • Java 8 使用 Lambda 过滤数组

    我有一个double 我想在一行中过滤掉 创建一个没有的新数组 负值而不添加for循环 使用 Java 8 lambda 表达式可以实现这一点吗 在 python 中 使用生成器将是这样的 i for i in x if i gt 0 在
  • 为什么不能在类声明中使用“is_base_of”(不完整类型)?

    我完全明白为什么会这样cannot work class Base class A static assert std is base of
  • Android - getAdapterPosition() 在删除项目后返回 -1

    标题说明了一切 我有一个RecyclerView它用于动态存储值 但一次只能存储一项 该项目包含 3TextViews 当我正常添加所有项目时 它可以工作 但是当我添加 x 项目 然后删除最后一项 然后单击 提交 时 应用程序崩溃 I do
  • 正则表达式 - 将匹配的文本移动到行的前面

    我一直在使用正则表达式 在 textmate 查找和替换工具中 将我收到的值表重新格式化为 PHP 数组 我已经完成了大部分工作 但仍在为最后的改变而苦苦挣扎 当前状态 subSectors 1 Crop Animal Production
  • 从 NodeJS 查询 Oracle 数据库中的大数据集

    我目前正在开展一个工作项目 其中我有一个 Oracle 10 数据库表 其中包含约 310K 的给予或获取 10 30K 行 目标是在有角度的前端中显示这些行 但是通过 NodeJS 返回所有这些行需要花费大量时间 鉴于我是第一次使用 No
  • 仅允许访客在 WooCommerce 中结帐特定产品

    以下代码将自定义字段添加到管理产品设置 以在产品级别管理访客结账 Display Guest Checkout Field add action woocommerce product options general product dat