无法在AJAX函数内使用WP_QUERY搜索帖子

时间:2020-09-06 作者:Aditya Agarwal

WP\\u查询用于通过它提供的简单参数获取帖子。WordPress为搜索提供了一个名为“s”的参数。它基本上搜索所有帖子的内容,并在任何地方列出带有该字符串的帖子。还有另一个WP\\u查询参数,称为post\\u status,可用于筛选帖子,其中Post_Status

请注意,此代码包含在AJAX函数中。我正在从前端调用一个AJAX函数,该函数将当前页面的url传递给$_POST[\'url\']. $_POST[\'url\'] 已定义,请不要担心。我希望查询只有草稿帖子,如果url有;草稿/quot;在里面。通过重复我知道的变量,变量本身运行良好。

下面是WP\\U查询

$Current_Id =get_current_user_id();


echo $_POST[\'url\'] . \'/n\';
if(strpos($_POST[\'url\'], \'draft\') == false ){
    $post_status = array(\'publish\', \'privatised\', \'draft\', \'inherit\', \'future\');
}
else{
    $post_status = array(\'draft\');
}

echo print_r($post_status) . \'/n\';

$args = array(
    \'post_type\'     => array(\'post\', \'download\', \'page\'),
    \'post_status\'   => array(\'draft\'),
    \'author\'        => $Current_Id,
    \'numberposts\'   => -1,
    \'orderby\'           => \'post_date\',
    \'order\'             => \'DESC\',
    \'posts_per_page\'    => 20,
    \'paged\'      => $_POST[\'pagenum\'], 
    \'s\'     => $_POST[\'search\'],
 );

$pagenum = ($_POST[\'pagenum\'] ? $_POST[\'pagenum\'] : \'1\');
$user_posts = new WP_Query( $args);

    if( !empty($user_posts)){   
    ?>

    <?php 
    while ($user_posts->have_posts()) {
        $user_posts->the_post();
上述代码虽然看起来正确,但不起作用。当我使用此代码时,它会忽略Post状态。假设我从url提交表单;https://milyin.com/draft/";并且输入字段有文本“;埃隆麝香“;在里面。AJAX应该执行WP\\u查询并返回当前用户的帖子,这些帖子中包含“http://www.AJAX.org/cn/cn”一词;埃隆麝香“;并且只显示;草稿“;职位。不幸的是,它过滤并显示所有帖子状态中的Elon Musk帖子。

我最初的怀疑是$_POST[\'url\'] 未定义或定义错误。但后来我随机决定删除搜索参数。如下所示。

$args = array(
    \'post_type\'     => array(\'post\', \'download\', \'page\'),
    \'post_status\'   => array(\'draft\'),
    \'author\'        => $Current_Id,
    \'numberposts\'   => -1,
    \'orderby\'           => \'post_date\',
    \'order\'             => \'DESC\',
    \'posts_per_page\'    => 20,
    \'paged\'      => $_POST[\'pagenum\'], 
 );

正如你所看到的,上面代码中唯一改变的是\'s\' => $_POST[\'search\'], 缺少。当我这次提交表格的时候。正如我所料,它只显示了草稿栏。然后我尝试了相反的方法。

我试过了\'s\' => $_POST[\'search\'], 并包括 \'post_status\' => $post_status, 砰的一声,它又开始工作了。它只是按照我的预期显示了所有的选秀帖子。

所以In Nutshell, My code runs perfect, if I just Query post_status, it also runs perfect when I just query s but it does not run when I s and post_status both together. Key Things to remember, this code is running using AJAX, the $_POST[\'url\'] seems obvious suspect, but it is running perfectly in my opinion, and I am using this code to echo (not returning any thing) Title Featured Image etc.

当我用spost_status 总之,它只显示所有Post\\u类型的搜索结果,而且,当我在没有AJAX的情况下直接运行此代码时,它也可以工作。

1 个回复
SO网友:kaiser

下面你会发现一些关于帖子类型你可能需要考虑的事情。但有一点需要注意:

每一个WP_Query 已完成for the current user. 如果看不到预期效果,请先与登录的管理员用户一起尝试。通过这种方式,您可以轻松检查问题是否是功能问题。

关于您似乎要从DB查询的post状态:

  • private: 此post状态仅对已登录的管理员可用
  • publish: 仔细检查结果中是否包含这些内容。它们默认存在。你甚至不需要添加它们
  • privatised: 这是自定义的post状态吗?如果是,请确保您没有设置exclude_from_search 设置还要注意的是custom status are not supported as per now.
  • draft: <只有当您有edit_others_posts 可用于的功能role that the searching user has.
  • inherit: 这将包括附件和修订。请注意,这可能也是一个能力问题
  • future: 同上
确保测试;“问题”;您首先要通过某个管理屏幕中的迷你插件来检查这是否是管理UI/前端问题。常量是不同的,等等。如果它在那里工作,则可能缺少常量,或者用户角色无法查看您希望在查询结果中看到的内容。

确保read @TomJNowells answers 关于分类法与其他事物,如帖子类型。TL;DR: 您会发现,在某些情况下,您不想要分类法……或者只想要分类法。此外,使用自定义功能处理和自定义元框注册自定义分类法也不难。通过这种方式,您可以绕过与Tumblr克隆功能相关的任何问题,这些问题从未完成,也从未正确思考过,也从未完全实现过。如果不受过时和遗留特性的限制,做自己想做的事情可能会更容易实现。

链接到developer.wordpress.org:

相关推荐

在提交AJAX表单时打开模式弹出窗口

我正在将一个表单从旧网站迁移到新网站,但是在提交AJAX表单之后应该打开的jQuery模式不起作用。你可以在这里测试https://tomlab.dreamhosters.com/sign-the-declaration/表单似乎正在运行,但弹出窗口未显示,但如果我访问https://tomlab.dreamhosters.com/sign-the-declaration/#modal 笔直,打开正确。希望你能帮助我!我已经为此奋斗了几天了。谢谢以下是功能代码:function forms_sumate_