WordPress子比主题设置只能余额支付或指定支付渠道图文教程

WordPress子比主题设置只能余额支付或指定支付渠道图文教程

AI 智能摘要
对于运营内容付费WordPress网站的站长来说,支付方式的灵活控制是精细化运营的关键一环。有时,我们可能希望引导用户优先使用WordPress网站余额进行消费,或者在特定内容类型(如文章页)上,仅开放余额支付或指定的付款方式,从而简化支付流程、促进用户充值。WordPress子比主题作为强大的付费内容主题,通过以下代码可以实现这种定制化的支付策略。

对于运营内容付费WordPress网站的站长来说,支付方式的灵活控制是精细化运营的关键一环。有时,我们可能希望引导用户优先使用WordPress网站余额进行消费,或者在特定内容类型(如文章页)上,仅开放余额支付或指定的付款方式,从而简化支付流程、促进用户充值。WordPress子比主题作为强大的付费内容主题,通过以下代码可以实现这种定制化的支付策略。

需求场景:

  • 场景一: 仅允许用户在文章页面使用余额支付,禁用支付宝和微信等第三方支付渠道。用户需要先充值到网站余额才能购买文章。
  • 场景二: 根据业务需求,更灵活地控制不同内容类型的支付方式。

解决方案:两种实现方式

这里提供两种方法来实现上述需求,您可以根据自己的偏好和技术理解选择其一。

方法一:通过JavaScript在前端隐藏支付方式(适用于强制余额支付)

这种方法通过前端JavaScript代码动态移除支付宝和微信的支付选项,从而达到只显示余额支付的效果。

优点: 简单直接,无需修改PHP逻辑。
缺点: 仅为前端隐藏,如果用户禁用JavaScript或通过其他方式绕过,可能会失效。

安装方法:

将以下代码放置在您WordPress子比主题的页脚文件footer.php中,确保它在</body>标签之前。

  1. 登录WordPress后台。
  2. 导航到主题文件编辑器: 通常在“外观”(Appearance)>“主题文件编辑器”(Theme File Editor)。
  3. 选择footer.php文件: 在右侧文件列表中,找到并点击您主题的footer.php文件。
    • 主题铺建议: 强烈推荐使用子主题。如果直接修改父主题文件,主题更新时您的更改将会丢失。
  4. 粘贴代码并保存: 将以下JavaScript代码复制并粘贴到footer.php文件的</body>标签之前

代码如下:

<script>
(function(){
    // 检查当前页面路径是否以.html结尾(子比主题文章页通常是动态的,不一定会以.html结尾,此判断需要根据实际情况调整或移除)
    // 主题铺建议:更精确的判断方式是检查body标签的class,例如:
    // if (!document.body.classList.contains('single-post')) return;
    // 如果您希望所有页面都生效,可以移除此if判断。
    // 如果只想在文章详情页生效,可以根据子比主题的文章页body class进行判断,例如 `single` 或 `single-post`
    // var isArticlePage = document.body.classList.contains('single') || document.body.classList.contains('single-post');
    // if (!isArticlePage) return; // 如果不是文章页,则不执行后续操作


    function removePaymentMethods(){
        // 查找所有支付方式的radio按钮,并移除支付宝和微信的选项
        document.querySelectorAll(
            '.payment-method-radio[data-value="alipay"], .payment-method-radio[data-value="wechat"]'
        ).forEach(el => el.remove());

        // 也可以移除对应的支付方式文本标签,例如:
        // document.querySelectorAll('.pay-type-box .pay-item.alipay, .pay-type-box .pay-item.wechat').forEach(el => el.remove());
    }

    // 首次页面加载时执行一次移除操作
    removePaymentMethods();

    // 由于子比主题的支付弹窗内容可能是动态加载的,所以需要监听DOM变化
    // 使用MutationObserver监听body的子节点变化,当新的支付方式元素被添加到DOM时再次执行移除操作
    const observer = new MutationObserver(removePaymentMethods);
    observer.observe(document.body, { childList: true, subtree: true });
})();
</script>

主题铺提醒: 我在原代码中对if (!window.location.pathname.endsWith(".html")) return;这行代码进行了注释和优化建议。WordPress子比主题的文章页通常是动态生成的,不一定会以.html结尾。更稳妥且兼容性更好的做法是根据页面的body标签的class来判断是否为文章详情页(例如singlesingle-post),或者如果您希望这个规则在所有页面都生效,可以直接移除这个if判断。

方法二:通过PHP在后端控制支付方式(推荐,更严谨可靠)

这种方法通过WordPress的过滤器钩子,在后端逻辑中直接修改WordPress子比主题提供的支付方式列表,只返回允许的支付方式。这比前端JavaScript更可靠,即使禁用JavaScript也能生效。

优点: 后端控制,安全性更高,不易被绕过。
缺点: 需要一定的PHP知识。

安装方法:

将以下代码放置在您WordPress子比主题func.php文件或子主题的functions.php文件中。

  1. 登录WordPress后台。
  2. 导航到主题文件编辑器: 通常在“外观”(Appearance)>“主题文件编辑器”(Theme File Editor)。
  3. 选择正确的文件: 在右侧文件列表中,找到并点击您主题的func.php文件(如果是WordPress子比主题)或子主题的functions.php文件。
    • 主题铺建议: 强烈推荐使用子主题。如果直接修改父主题文件,主题更新时您的更改将会丢失。
  4. 粘贴代码并保存: 将以下PHP代码复制并粘贴到文件的末尾(在?>之前,如果文件末尾没有?>则直接粘贴)。

代码如下:

<?php
// 主题铺提醒:如果您的主题已定义了<?php标签,请勿重复添加

/**
 * 在请求支付时,如果是文章类型(post),则仅显示余额支付
 *
 * @param array $methods 现有的支付方式数组
 * @param string $pay_type 支付类型(例如 'pay' 用于购买,'recharge' 用于充值)
 * @return array 过滤后的支付方式数组
 */
add_filter('zibpay_payment_methods', 'force_balance_for_post_cashier', 10, 2);
function force_balance_for_post_cashier($methods, $pay_type) {
    // 检查请求中是否存在id参数,并将其转换为整数
    $post_id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;

    // 确保有文章ID
    if ($post_id) {
        // 获取文章类型
        $post_type = get_post_type($post_id);

        // 如果文章类型是“post”(即普通文章)
        if ($post_type === 'post') {
            // 获取子比主题所有支付方式的参数配置
            $payment_method_args = zibpay_get_payment_method_args();

            // 检查是否允许余额支付(子比主题的内部函数判断)
            if (zibpay_is_allow_balance_pay($pay_type)) {
                // 如果允许余额支付,则只返回余额支付方式
                return array('balance' => $payment_method_args['balance']);
            }
            // 如果不允许余额支付(例如当前是充值操作,但余额支付不是充值方式),则返回空数组
            return array();
        }
    }

    // 如果不是文章类型,或者没有文章ID,或者不符合其他特定条件,则返回原始支付方式
    return $methods;
}
?>

完成上述配置后,当用户尝试在文章页面购买内容时,支付弹窗中的支付方式选项将只显示余额支付。用户将无法直接选择支付宝或微信进行支付,而是需要先进行余额充值。

最后总结

这两种方法都为WordPress子比主题用户提供了强大的支付控制能力。PHP后端方法(方法二)因其更高的安全性和可靠性而更值得推荐,它从根本上限制了支付选项。而JavaScript前端方法(方法一)则适用于快速实现或作为辅助手段。根据您的具体需求和安全考量,选择合适的方案,将有助于您更好地管理网站的付费内容,引导用户行为,并提升整体运营效率。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容