我正在使用wpgraphql plugin。在大多数情况下,它是有效的。但是,我只能查询状态为published
的帖子。状态为pending
或draft
的帖子不会显示。
换句话说,这是我的查询:
query MyQuery {
newsArticles {
nodes {
title
}
}
}
如果我将文章的状态设置为pending
或draft
,则什么都没有显示。如果我将它们设置为published
,则会显示出来。
请注意,如果我尝试使用其他帖子类型(例如posts
)或查询使用edges
,则没有任何区别,
query MyQuery {
newsArticles {
edges {
node {
title
}
}
}
}
结果相同。
那么,不管状态如何,是否知道如何返回结果?
谢谢。
答案 0 :(得分:2)
默认情况下,WPGraphQL只允许查询公共帖子,因为这是WordPress的工作方式,即,只有公共帖子对用户可见。
最初的几个步骤是在我们的graphql
查询上添加一些身份验证,以便可以查询非公开帖子。
通过克隆plugins
目录中的存储库或通过WordPress上传zip文件来下载此https://github.com/wp-graphql/wp-graphql-jwt-authentication WordPress插件。
完成上述步骤后,您应该可以在“插件”部分中看到该插件。现在不要激活插件。
将define('GRAPHQL_JWT_AUTH_SECRET_KEY', 'secret_token');
添加到wp-config.php
文件夹中的/var/www/html
文件中。插件使用此密钥生成令牌以访问非公开帖子。确保秘密令牌是一些随机的长字符串,只能由WordPress服务器访问。
激活插件,并查询以下内容
mutation LoginUser {
login( input: {
clientMutationId: "uniqueId",
username: "your_login",
password: "your password"
} ) {
authToken
user {
id
name
}
}
}
您将收到一个令牌,您可以从代码中使用该令牌查询非公开帖子。
完成上述步骤后,剩下的唯一事情就是如何使用令牌并在代码中获取非公开帖子。
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
目录中的.htaccess
文件中添加/var/www/html
。如果您以前从未更新过.htaccess
文件,则更新后的外观应如下所示。这将在WordPress服务器上的传入请求上启用Authorization
标头。我们将使用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
Authorization
标头并获得非公开帖子Authorization: Bearer ${your_token}
用您的实际令牌替换${your_token}
,现在您可以查询非公开帖子。