使用WpGraphQL显示草稿和待处理的帖子

时间:2020-02-23 17:57:55

标签: wordpress graphql wp-graphql

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

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

query MyQuery {
  newsArticles {
    nodes {
      title
    }
  }
}

如果我将文章的状态设置为pendingdraft,则什么都没有显示。如果我将它们设置为published,则会显示出来。

请注意,如果我尝试使用其他帖子类型(例如posts)或查询使用edges,则没有任何区别,

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

结果相同。

那么,不管状态如何,是否知道如何返回结果?

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

  1. 通过克隆plugins目录中的存储库或通过WordPress上传zip文件来下载此https://github.com/wp-graphql/wp-graphql-jwt-authentication WordPress插件。

  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文件,则更新后的外观应如下所示。这将在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
  1. 完成上述步骤后,您将可以发送Authorization标头并获得非公开帖子
Authorization: Bearer ${your_token}

用您的实际令牌替换${your_token},现在您可以查询非公开帖子。