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

Mos*_*she 4 wordpress graphql wp-graphql

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

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

query MyQuery {
  newsArticles {
    nodes {
      title
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

query MyQuery {
  newsArticles {
    edges {
      node {
        title
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

结果是一样的。

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

谢谢。

小智 6

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

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

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

  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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 添加目录中存在的SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1文件。如果您之前没有更新过文件,则更新后的文件应如下所示。这将启用WordPress 服务器上传入请求的标头。我们将使用标头发送经过身份验证的令牌。.htaccess/var/www/html.htaccessAuthorizationAuthorization
mutation LoginUser {
  login( input: {
    clientMutationId: "uniqueId",
    username: "your_login",
    password: "your password"
  } ) {
    authToken
    user {
      id
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 完成上述步骤后,您将能够发送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
Run Code Online (Sandbox Code Playgroud)

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