首先,请don\'t use query_posts()
(我的重点)!
注:This function isn\'t meant to be used by plugins or themes. 如后文所述,有更好、性能更好的选项来更改主查询。query_posts()
是overly simplistic 和problematic 通过将页面的主查询替换为查询的新实例来修改页面的主查询的方法。是的inefficient (重新运行SQL查询)和will outright
fail 在某些情况下(尤其是在处理贴子分页时)。Any modern WP code should use more reliable methods, like
making use of pre_get_posts hook, for this purpose.
http://codex.wordpress.org/Function_Reference/query_posts
其次,这是行不通的:
$gotimages = get_children( array(
\'post_type\' => \'attachment\',
\'post_mime_type\' => \'image\',
\'post_parent\' => get_the_ID()
)),
array(
\'key\' => implode(\', \', $gotimages),
\'compare\' => \'=\'
),
这一行。。。
\'post_parent\' => get_the_ID()
。。。可能会出现问题,因为它将在循环中返回当前的post ID,但您的循环直到稍后才会开始。考虑到您的代码是如何编写的,我认为您正在尝试构造一种子查询,但它不是这样工作的。
这一行。。。
\'key\' => implode(\', \', $gotimages),
。。。这肯定是个问题。
$gotimages
, 如果有结果,将是一个对象数组。当你试图内爆时,你会得到如下结果:
可捕获的致命错误:类WP\\u Post的对象无法转换为字符串。。。
使用帖子ID试用,知道有附件:
$gotimages = get_children( array(
\'post_type\' => \'attachment\',
\'post_mime_type\' => \'image\',
\'post_parent\' => 1
));
var_dump(implode(\', \', $gotimages));
此外,我相当确信
key
a的参数
meta_query
不接受逗号分隔的字符串,即使该对象
implode()
正确地
第三get_children()
将返回所有附件,其中一个是特色图片,但WordPress处理附件的能力很差,一旦将图片附加到帖子上,就很难取消附加。您将获得曾经显示在帖子正文中但不再显示的图像。因此,从逻辑上讲,即使所有代码都工作了,您所尝试的也不会工作。
事实上,你所要做的是一件棘手且劳动密集的事情,因为这需要regex
在帖子正文上搜索图像。如果你有画廊参与,它会变得更加复杂。
那么,我能离你多近
我需要查询所有在其内容区域中有图库或附件的学生。不是他们的特色形象。
如果我做得对的话,这应该会让你接近“所有在内容区域中有图库或附件的学生”:
$args = array(
\'post_type\' => \'attachment\',
\'post_mime_type\' => \'image\',
\'post_status\' => \'inherit\',
\'posts_per_page\' => -1,
\'post_parent__not_in\' => array(0),
\'meta_query\' => array(
array(
\'key\' => \'_thumbnail_id\',
\'value\' => \'x\',
\'compare\' => \'NOT EXISTS\'
)
),
\'fields\' => \'post_parent\'
);
$atts = new WP_Query($args);
$parents = array_unique(wp_list_pluck($atts->posts,\'post_parent\'));
// get your students posts
$args = array(
\'post_type\' => \'students\',
\'post__in\' => $parents
);
$students = new WP_Query($args);
// see some results
var_dump($students->request);
var_dump($students->posts);
它没有做的是:
对附加图像然后从帖子正文中删除的情况进行补偿。这些仍然会出现以及手动将图像写入帖子正文的情况。这些不会出现您的另一个选择是在您的帖子类型中搜索一些似乎可以识别的字符串:
$args = array(
\'post_type\' => \'students\',
\'s\' => \'<img \'
);
$students = new WP_Query($args);
我不确定这会有多强大,但当我尝试时,它确实会返回一些合理的结果。