在尝试获取附件时,从“插入POST”中排除图像

时间:2012-03-07 作者:grabner

我这里有一个硬币滑块,它可以从图库中拍摄所有照片。我通过以下代码获取附件:

$attachments = get_posts(array(\'post_type\' => \'attachment\', \'post_parent\' => $post->ID));
但这个函数也给我提供了一些图片,这些图片是内联发布在页面上的。如果我看文章图片,我可以在标签库中看到图片。该图片也显示在编辑器中。

如何排除插入编辑器的图片?

我看到有一个exclude 选项get_posts, 但两者都不是get_the_post_thumbnail(); 也没有get_post_thumbnail_id(); 确实对我有用。图像仍包含在滑块和帖子中。

Edit:

似乎不可能不把照片放进画廊就把它放在帖子里。如果它在库中,它也是get_posts. 现在,我已经在Web服务器上通过FTP上传了一个文件,并使用URL放置了该图像。现在它似乎奏效了,但这不是一个可接受的解决方案。。。

1 个回复
SO网友:jesse_ae

不久前,我遇到了一个类似的问题,并在这里帮助回答了这个问题。我当时没有账户,也找不到原始帖子,否则我会链接它。如果我记得的话,Jan Fabry 几乎是给了我行军的命令,我砍下了一些东西。记住,我不知道你是如何将图像输入硬币滑块的。我想象你正在循环查看get\\u帖子的结果,并一次一张地吐出图像。无论如何,这里有一些代码。虽然很难看,但它很管用。

因此,首先,您可以使用“wp\\u insert\\u post”挂钩为插入到帖子内容中的任何图像添加唯一的元值。

add_action(\'wp_insert_post\', \'insertedImage_save_meta\');

function insertedImage_save_meta($post_id) {
    $upPost = get_post($post_id);

    $rawPostDoc = new DOMDocument();
    @$rawPostDoc->loadHTML($upPost->post_content);                     
    $imgs = $rawPostDoc->getElementsByTagName(\'img\');

    foreach($imgs as $img){
        $imgIDStr = substr($img->getAttribute(\'class\'), (stripos($img->getAttribute(\'class\'),\'wp-image-\')+9), 8);
        $imgID = preg_replace("[^0-9]", \'\', $imgIDStr);

        if($imgID !== false && $imgID !== \'\') { // double falsy check because of specific nature of stripos() returns coupled with the preg_replace return. Not sure if this is necessary.

            if(get_post_meta($imgID, \'_inserted-image\', true) === \'\')
                update_post_meta($imgID, \'_inserted-image\', \'yes\');

        }

    }

}
然后,在显示时,在图像对象中循环时,使用get\\u post\\u meta()调用检查唯一的meta,如果找到,则忽略吐出任何html。

因此,如果我使用foreach($images as$image)循环我的get\\u posts结果,我会这样做:

if ( get_post_meta( $image->ID, \'_inserted-image\', true ) === \'yes\' )
    continue;
限制:如果插入的图像稍后从帖子内容中删除,但保留在帖子库中,则不会从图像中删除指定的元值。但是,如果在正文内容中找不到图像,可以很容易地扩展该功能,以检查所有帖子的附加图像,并删除meta标记。

结束

相关推荐

Wordpress gallery shortag

我正在创建一个简单的幻灯片,在那里我想显示一篇文章中的4幅图像,我四处搜索,找到了这段代码,它只使用了内置的gallery功能<li><?php echo do_shortcode(\'[gallery id=\"\'.$post->ID.\'\"]\'); ?></li> 问题是它吐出了整个画廊。。。没有办法把这个限制在2,3吗?我试着用http://codex.wordpress.org/Function_Reference/get_the_post