Wp-graphql插件环境下WordPress内置get_tags()函数无法正常使用求助
问题排查与修复方案
错误点说明
- 链接获取函数错误:使用仅适用于分类目录的
get_category_link()函数获取标签链接,无法正确返回标签URL,需要替换为标签专属的链接函数。 - 查询参数逻辑错误:
get_tags()的number参数为单次查询返回的条目数,直接传入每页数量即可,现有逻辑$number = $perPage + $offset会导致查询数量随页码增大而递增,既多余又影响性能。 - 空标签默认过滤:
get_tags()默认开启hide_empty配置,会自动过滤无关联文章的标签,若站点存在大量空标签会出现返回结果数量不符合预期的问题。 - 性能不足:3万+标签的场景下查询全量术语对象会占用额外内存,可指定仅查询ID降低性能消耗。
修复后完整代码
//Get all tag urls for sitemap add_action('graphql_register_types', function () { register_graphql_field('RootQuery', 'getTagUrls', [ 'type' => ['list_of' => 'String'], 'args' => [ 'pageNo' => [ 'type' => 'int', ], 'perPage' => [ 'type' => 'int', ], ], 'description' => __('This function returns tag urls, It takes pageNo and PerPage as optional args.'), 'resolve' => function ($source, $args, $context, $info) { $tagUrls = array(); $paged = isset($args['pageNo']) ? $args['pageNo'] : 1; $perPage = isset($args['perPage']) ? $args['perPage'] : 10; $offset = ($paged - 1) * $perPage; $tagIds = get_tags(array( 'orderby' => 'name', 'order' => 'ASC', 'number' => $perPage, 'offset' => $offset, 'hide_empty' => false, // 按需调整,false为返回所有标签包括空标签 'fields' => 'ids' // 仅查询ID,大幅提升性能 )); foreach ($tagIds as $tagId) { $fullUrl = esc_url(get_tag_link($tagId)); $url = str_replace(home_url(), '', $fullUrl); $tagUrls[] = $url; } return $tagUrls; }, ]); });
验证查询示例
query GetTagPageUrls { getTagUrls(pageNo: 1, perPage: 20) }
内容的提问来源于stack exchange,提问作者Dipankar Maikap
相关产品推荐
相关产品推荐

