你如何才能确定一张图片只是贴在了帖子上,还是实际上已经被插入了帖子?

时间:2010-11-18 作者:Scott B

请容忍我。我保证我做完后会有一个问题:)

在WordPress中,您可以在编辑帖子时上载图像,并可以选择是否将图像插入到内容中。

无论如何,在查看Media manager时,图像似乎已“附加”到帖子。

WordPress是否会在数据库中放置任何引用,以区分已附加并插入帖子内容的图像?或者反过来说,一个已经附加到帖子但没有插入帖子内容的图像?

Why do I want to know this?

我想允许用户上传的图像将写在帖子内容(一行图像)上方,只需通过帖子附件向导上传即可。

但他们也可能上传一些他们只想出现在内容中的图像,因此在这种情况下,他们会单击“插入帖子”。除非我有办法区分实际插入的图像和仅附加的图像,否则它们将得到重复的图像,一个在帖子中,一个在帖子顶部。

有什么想法吗?

我认为另一种方法是在附件编辑器中添加一个复选框,以标记要显示为文章标题附件的图像,然后使用特殊标记查找附加到文章的图像。

3 个回复
最合适的回答,由SO网友:Matteo Riva 整理而成

我曾经nextgen gallery plugin 做这样的事。事实上,我只使用了其中的一半:最终用户通过插件的界面上传图像,但帖子中的实际显示是通过自定义短代码完成的。

我认为除了检查帖子内容来源之外,没有办法判断帖子中是否插入了附件。

SO网友:Jesse

**更新的代码段:使用了全局$post ID,而不是传入的ID,因此在将元标记添加到内容图像之前需要进行一些更新。现在它工作了。

我需要一个类似的解决方案,根据扬·法布里的建议,我想出了一个函数(虽然不雅观,但确实有效):

    /* Add meta value to distinguish inserted images from other attached images - lionassociates.com */

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

        $rawPostDoc = new DOMDocument();
        @$rawPostDoc->loadHTML($upPost->post_content);                     
        $imgs = $rawPostDoc->getElementsByTagName(\'img\');
        $i = 0;
        foreach($imgs as $img){
            $imgIDStr = substr($img->getAttribute(\'class\'), (stripos($img->getAttribute(\'class\'),\'wp-image-\')+9), 6);
            $imgID = preg_replace("[^0-9]", \'\', $imgIDStr);
            if($imgID != \'\') {
                if(get_post_meta($imgID, \'_inserted-image\', false))
                    update_post_meta($imgID, \'_inserted-image\', \'yes\');
                else
                    add_post_meta($imgID, \'_inserted-image\', \'yes\');
            }
            $i++;    
        }
    }
    /* Do something with the data entered */
    add_action(\'save_post\', \'insertedImage_save_meta\');
这样就可以粘贴到(functions.php)中。然后我在循环中使用附件元值,无论我在哪里吐出我的图像(根据Jan Fabry):

    $imgs = get_posts(array(\'post_parent\'=>get_the_id(), \'numberposts\'=>-1, \'post_type\'=>\'attachment\', \'post_mime_type\'=>\'image\'));
    if($imgs[0]) {
        foreach($imgs as $img) {
            if(!get_post_meta($img->ID, \'_inserted-image\', true))
            echo wp_get_attachment_image($img->ID, \'sec-slide\'); //\'sec-slide\' is just the name of a custom image size
        }
    }
这会弹出未插入帖子内容的所有附加图像。

SO网友:Jan Fabry

正如肯普所说,在数据库中,已附加的图像与实际插入内容的图像之间没有区别。我会扫描内容(在保存后,而不是每次显示时),并为附加但未显示的图像设置额外的元数据属性。记住也要检查库:它们是用一个短代码插入的,所以它并不总是只搜索<img> 标签。

结束

相关推荐