在Dokan插件中获取WordPress商家URL失败,求助滑块链接问题
修复Dokan商家URL短代码的问题
看起来你的代码逻辑有点混乱,把查询过滤和短代码功能混在一起了,而且几个关键调用也存在错误,我来帮你梳理并修正:
原代码的核心问题
- 短代码函数定位错误:
store_query_filter作为短代码函数,不需要去修改WP_Query,它应该直接根据输入返回对应内容 - 查询变量调用错误:
get_query_var( $query->custom_store_url )完全不合法,你既没定义过这个自定义查询变量,参数格式也不对 - 店铺信息调用错误:
dokan_get_store_info()返回的是数组而非对象,且dokan_get_store_url()需要的是商家的用户ID,不是店铺信息里的字段 - 函数没有处理空数据场景,也没接收短代码参数
修正后的代码
下面是一个可以正常工作的短代码,支持通过商家的slug或user_id参数获取店铺URL:
function get_vendor_store_url( $atts ) { // 设置短代码默认参数 $atts = shortcode_atts( array( 'slug' => '', // 商家用户的slug 'user_id' => '' // 商家用户的ID ), $atts ); // 优先使用user_id,没有则通过slug获取用户ID $user_id = ! empty( $atts['user_id'] ) ? absint( $atts['user_id'] ) : 0; if ( empty( $user_id ) && ! empty( $atts['slug'] ) ) { $seller_info = get_user_by( 'slug', sanitize_text_field( $atts['slug'] ) ); $user_id = $seller_info ? $seller_info->ID : 0; } // 验证用户是Dokan商家后返回店铺URL if ( $user_id && dokan_is_user_seller( $user_id ) ) { $store_url = dokan_get_store_url( $user_id ); return esc_url( $store_url ); } // 未找到商家时返回空值或自定义提示 return ''; } add_shortcode( 'store_vendor_url', 'get_vendor_store_url' );
使用方法
- 通过商家用户ID调用:
[store_vendor_url user_id="123"] - 通过商家用户slug调用:
[store_vendor_url slug="john-doe"]
滑块循环中的使用示例
如果你的循环能获取到商家的用户ID或slug,直接在循环里输出即可:
// 假设$vendor是循环中的商家对象,包含user_id字段 echo do_shortcode( '[store_vendor_url user_id="' . esc_attr( $vendor->user_id ) . '"]' );
或者直接调用函数跳过短代码,效率更高:
// 假设$vendor_user_id是商家的用户ID if ( dokan_is_user_seller( $vendor_user_id ) ) { $store_url = dokan_get_store_url( $vendor_user_id ); echo '<a href="' . esc_url( $store_url ) . '">访问店铺</a>'; }
这样就能正确获取到Dokan商家的店铺URL了~
内容的提问来源于stack exchange,提问作者Abdullah Alkurdi
相关产品推荐
相关产品推荐

