2

我正在使用wpgraphql 插件。在大多数情况下,它正在工作。但是,我只能查询状态为 的帖子published。状态为pendingdraft不显示的帖子。

换句话说,这是我的查询:

query MyQuery {
  newsArticles {
    nodes {
      title
    }
  }
}

如果我将文章的状态设置为pendingor draft,则不会显示任何内容。如果我将它们设置为,published那么它们确实会出现。

posts请注意,如果我尝试不同的帖子类型(如)或执行查询使用,这没有任何区别edges,如下所示:

query MyQuery {
  newsArticles {
    edges {
      node {
        title
      }
    }
  }
}

结果是一样的。

那么,知道如何无论状态如何都返回结果吗?

谢谢。

4

1 回答 1

4

默认情况下,WPGraphQL 只允许查询公共帖子,因为这就是 WordPress 的工作方式,即只有公共帖子对用户可见。

前几个步骤是对我们的graphql查询添加一些身份验证,以便可以查询非公开帖子。

  1. 下载这个 - https://github.com/wp-graphql/wp-graphql-jwt-authentication WordPress 插件,方法是克隆plugins目录中的 repo 或通过 WordPress 上传 zip 文件。

  2. 完成上述步骤后,您应该能够在您的插件部分看到该插件。现在不要激活插件。

  3. 添加define('GRAPHQL_JWT_AUTH_SECRET_KEY', 'secret_token');wp-config.php文件夹中存在的文件中/var/www/html。插件使用此密钥生成令牌以访问非公开帖子。确保秘密令牌是一些只能由 WordPress 服务器访问的随机长字符串。

  4. 激活插件,查询如下

mutation LoginUser {
  login( input: {
    clientMutationId: "uniqueId",
    username: "your_login",
    password: "your password"
  } ) {
    authToken
    user {
      id
      name
    }
  }
}

您将收到一个令牌,您可以使用该令牌从您的代码中查询非公开帖子。

完成上述步骤后,剩下的就是如何使用令牌并获取代码中的非公开帖子。

  1. 添加SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1您的.htaccess文件,该文件存在于/var/www/html目录中。如果您之前没有更新过您的.htaccess文件,更新后的文件应该如下所示。这将启用AuthorizationWordPress 服务器上传入请求的标头。我们将使用Authorization标头发送经过身份验证的令牌。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
  1. 完成上述步骤后,您将能够发送Authorization标题并获取非公开帖子
Authorization: Bearer ${your_token}

替换${your_token}为您的实际令牌,您现在将能够查询非公开帖子。

于 2020-11-09T09:06:37.673 回答