0

我正在尝试使用分页获取标签网址。这是完整的代码。我正在尝试扩展 wp-grapphql 功能。这样我就可以获取标签分页标签网址。我有超过 3 万个标签。我能够成功获得分页类别、帖子、作者网址,但不知道为什么这get_tags()在 wp-graphql 中无法正常工作。

//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;
            $number = $perPage + $offset;
            $tags = get_tags(array(
                'orderby' => 'name',
                'order' => 'ASC',
                'number' => $number,
                'offset' => $offset,
            ));
            foreach ($tags as $tag) {
                $fullUrl = esc_url(get_category_link($tag->term_id));
                $url = str_replace(home_url(), '', $fullUrl);
                array_push($tagUrls, $url);
            }
            return array_merge($tagUrls);
        },
    ]);
});
4

1 回答 1

0

您无需注册自己的类型即可获取标签网址和分页。

在查询tags(first: 3)中设置每页的项目数。在这种情况下 3。

query get_links_to_tags {
  tags(first: 3) {
    nodes {
      uri
      link
    }
    pageInfo {
      endCursor
      hasNextPage
      hasPreviousPage
      startCursor
    }
  }
}

在响应中,endCursor将是最后一项。

{
  "data": {
    "tags": {
      "nodes": [
        {
          "uri": "/tag/apple/",
          "link": "https://test.local/tag/apple/"
        },
        {
          "uri": "/tag/atari/",
          "link": "https://test.local/tag/atari/"
        },
        {
          "uri": "/tag/sinclair/",
          "link": "https://test.local/tag/sinclair/"
        }
      ],
      "pageInfo": {
        "endCursor": "YXJyYXljb25uZWN0aW9uOjI1MQ==",
        "hasNextPage": true,
        "hasPreviousPage": false,
        "startCursor": "YXJyYXljb25uZWN0aW9uOjE3Ng=="
      }
    }
  }
}

在上面的例子中,它是YXJyYXljb25uZWN0aW9uOjI1MQ==. 这是一个 base64 编码的字符串,你可以在Base64decode.org上对其进行解码,你会看到它说arrayconnection:251.

进行下一个查询时,将该游标的值用作after.

query get_links_to_tags {
  tags(first: 3, after: "YXJyYXljb25uZWN0aW9uOjI1MQ==") {
    nodes {
      uri
      link
    }
    pageInfo {
      endCursor
      hasNextPage
      hasPreviousPage
      startCursor
    }
  }
}

这将为您提供接下来的三个项目。

{
  "data": {
    "tags": {
      "nodes": [
        {
          "uri": "/tag/tandy/",
          "link": "https://test.local/tag/tandy/"
        },
        {
          "uri": "/tag/sun-microsystems/",
          "link": "https://test.local/tag/sun-microsystems/"
        },
        {
          "uri": "/tag/xerox/",
          "link": "https://test.local/tag/xerox/"
        }
      ],
      "pageInfo": {
        "endCursor": "YXJyYXljb25uZWN0aW9uOjI1NA==",
        "hasNextPage": true,
        "hasPreviousPage": true,
        "startCursor": "YXJyYXljb25uZWN0aW9uOjI1Mg=="
      }
    }
  }
}

如您所见,您可以使用hasNextPagehasPreviousPage来决定是否为分页设置上一个-下一个按钮。

于 2021-06-30T00:37:09.153 回答