我试图允许客户添加一种支付方式,就像他或她可以编辑他们的地址和其他一切.

所以,我把这个代码加到了My account => Payment Methods上.但当被点击时,它只是说"新的支付方式只能在 checkout 时添加"或类似的东西.

So, any solution to this?

add_action( 'woocommerce_after_account_payment_methods', 'add_payment_method_from_my_account' );
function add_payment_method_from_my_account() { ?>

    <a class="button" href="<?php echo esc_url( wc_get_endpoint_url( 'add-payment-method' ) ); ?>">
    <?php esc_html_e( 'Add payment method', 'woocommerce' ); ?></a>
    
    <?php
}

推荐答案

你需要一些完全不同的东西,作为理想的支付网关,需要support "add_payment_method" feature (or "tokenization" feature).

因此,我们不需要您的代码(以及您添加的所有其他相关代码).

但是,我们可以对一些已定义的支付网关启用Add_Payment_Method功能.

删除/禁用所有相关代码,改用以下挂钩函数:

add_filter( 'woocommerce_payment_gateway_supports', 'filter_payment_gateway_supports', 10, 3 );
function filter_payment_gateway_supports( $supports, $feature, $payment_gateway ) {
    // Here in the array, set the allowed payment method IDs (slugs)
    $allowed_payment_method_ids = array('bacs', 'cheque', 'cod');

    if ( in_array($payment_gateway->id, $allowed_payment_method_ids ) && $feature === 'add_payment_method' ) {
        $supports = true;
    }
    return $supports;
}

代码位于您的子主题的unctions.php文件中(或在插件中).经过测试,效果良好.

这次"付款方式"菜单项出现在"我的帐户"菜单项中,当进入"付款方式"部分时,有一个functional"添加付款方式"按钮.

Php相关问答推荐

如何使用属性#[Embedded]嵌入带有规则的对象集合?

自定义WooCommerce查询字符串仅显示前3个产品

我如何知道BaseController中当前运行的是哪个控制器?

使用WordPress wp_mail()的邮箱标题无效

让所有具有相同名称的产品在WooCommerce中更改价格

WooCommerce我的帐户:从帖子作者处获取自定义帖子类型帖子ID

在PHP中使用curl命令执行SCRAPYD操作.json不返回任何内容

允许客户定义特定WooCommerce产品的价格

为什么WooCommerce的动作钩子';woocommerce_checkout_update_order_review';包含旧信息?

Laravel处理belongToMany和额外字段

在 WooCommerce 我的帐户自定义部分显示未购买的产品

Google Sheets PHP API - 添加多个选项卡时出现问题

Windows 身份验证在 IIS 中验证什么?我可以在我的情况下禁用匿名身份验证吗?

Shopware 6 AuthControllerDecorator已弃用

根据WooCommerce中的产品重量更改简单产品的输入数量步值

MySQLI bind_param导致的Cannot modify readonly property错误

将 HTML 表单链接到 SQLite 数据库

如何使 Wordpress Woocommerce 自定义输入字段成为必填字段

Symfony 自定义注销

如何将 2021-04-08T22:25:09.335541Z 作为时间戳保存到 Laravel 中的数据库中?