排除在_content()中没有附件的帖子

时间:2014-05-11 作者:Andrew Lazarus

我试图编写一个循环,将内容区域中没有附件的帖子排除在外。

我有200个自定义帖子类型的帖子,叫做“学生”。我需要对所有在其内容区域中有图库或附件的学生进行查询。不是他们的特色形象。

这能做到吗?到目前为止,我的循环就是这样。我猜根本不起作用$gotimages 未输出带有附件的帖子。。。

最后的编辑:这里的循环工作得很好,我发现的问题是你只能分配一次图像。这意味着,如果您将图像上载到一篇文章,然后将相同的图像重新用于另一篇文章,则只会显示第一篇文章图像。此循环通过与帖子的关联工作。

为每篇文章重新上传你的图片,使其有效并具有独特的图片**

EDIT: Using the loop from s_ha_dum♦, this is getting closer to the thing I\'m looking for, though it\'s only pulling one result in the loop.

<?php
$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\'));

//var_dump($parents);

// get your students posts
$args = array( 
    \'post_type\' => \'student\',
    \'post__in\' => $parents
);
$students = new WP_Query($args);

// lets see some results
//var_dump($students->request);
//var_dump($students->posts);

echo \'<hr />\';

// Looping through the students
// I need to pull a random image from the post\' gallery / attachements
// Unsure of how I do this
if ( $students->have_posts() ) {
    while ( $students->have_posts() ) {
        $students->the_post();

        echo get_the_title();
        echo \'<hr />\';
    }
} else {
    // no posts found
    echo \'No students exist\';
}
/* Restore original Post Data */
wp_reset_postdata();
?>

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

首先,请don\'t use query_posts() (我的重点)!

注:This function isn\'t meant to be used by plugins or themes. 如后文所述,有更好、性能更好的选项来更改主查询。query_posts()overly simplisticproblematic 通过将页面的主查询替换为查询的新实例来修改页面的主查询的方法。是的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);
我不确定这会有多强大,但当我尝试时,它确实会返回一些合理的结果。

结束

相关推荐

Split Content and Gallery

有没有办法将帖子内容和库短代码分开。我想在我的正常内容之外显示库,无论其放置方式或位置如何。我可以用它来获取短代码本身:if(has_shortcode(get_the_content(), \'gallery\')){ $pattern = get_shortcode_regex(); preg_match(\"/$pattern/s\", get_the_content(), $matches); echo do_shortcode($matches[