You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce:移除商品作者登录时的加入购物车按钮并添加编辑链接

嘿,我看你在WooCommerce商品列表里自定义作者专属操作的时候踩坑了——功能没生效还搞崩了布局,这事儿我之前也碰到过,咱们一步步来修:

先分析你遇到的问题根源

  1. 过时函数导致的上下文错误:你用的get_currentuserinfo()在WordPress 4.5之后就被弃用了,这会导致用户信息获取异常,判断条件失效,所以第一个商品还显示加购按钮。
  2. 钩子优先级/写法错误:你写的remove_action代码没写完(1...),而且直接在循环外操作钩子,很容易打断商品循环的HTML结构,导致只有部分商品显示。
  3. 循环上下文丢失:没有在正确的钩子回调里处理商品数据,导致$post变量的上下文不对,判断逻辑失效。

修正后的完整代码

把这段代码放到你的主题functions.php里,或者自定义插件中:

add_action('woocommerce_after_shop_loop_item', 'custom_author_product_actions', 5);
function custom_author_product_actions() {
    global $post;
    $current_user = wp_get_current_user(); // 替换过时的get_currentuserinfo()
    
    // 验证:用户已登录,且是当前商品的作者
    if (is_user_logged_in() && $current_user->ID === $post->post_author) {
        // 移除默认的加入购物车按钮(原钩子优先级是10,要和它一致才能移除成功)
        remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10);
        
        // 添加自定义的编辑商品链接
        echo '<a href="' . esc_url(get_edit_post_link($post->ID)) . '" class="button wc-product-edit-btn">编辑我的商品</a>';
    }
}

关键细节说明

  • 钩子优先级:我们把自定义回调的优先级设为5,比加购按钮的优先级10高,这样能确保在加购按钮输出前就执行移除操作。
  • 安全处理:用esc_url()处理编辑链接,避免XSS风险,这是WordPress开发的最佳实践。
  • 上下文正确:在woocommerce_after_shop_loop_item钩子的回调里处理,确保每个商品循环时都能正确获取当前的$post和用户信息。

额外调试技巧

如果还是有问题,你可以临时加调试代码确认逻辑:

// 在回调里加这行,看用户ID和商品作者ID是否匹配
var_dump('用户ID:'.$current_user->ID, '商品作者ID:'.$post->post_author);

开启WordPress的WP_DEBUG模式(在wp-config.php里设define('WP_DEBUG', true);),看看有没有报错,这能快速定位钩子冲突或变量错误。

内容的提问来源于stack exchange,提问作者oyshiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:03:16