从内容中提取图像并将其设置为特色图像

时间:2011-07-03 作者:jyoseph

The problem:
我是从Wordpress iPhone应用程序发帖的。添加图像时,图像会显示在描述中,这是我不喜欢的。

What I\'m trying to do:
从描述中删除图像,然后执行以下操作之一(不知道一个选项比另一个选项有什么好处):

从删除的图像中获取图像源,并将其添加到自定义字段-或者-

  • 将图像设置为特色图像
  • 我想这些选项中的任何一个都可以帮助我隔离图像URL,以便在帖子模板中使用。

    What I\'ve tried:<简直就是太阳底下的一切。现在我正在为函数添加代码。php,但最终希望将其作为一个插件。

    我认为下面的代码太离谱了,但我想发布它来展示我所做的一些尝试:

    我添加了一个操作来运行函数mpb\\u remove\\u post\\u image on content\\u save\\u pre。。。

    add_action(\'content_save_pre\', \'mpb_remove_post_image\');
    
    问题是我无法使用content\\u save\\u pre访问post\\u id(我需要它来设置特色图像),因此我必须获取图像url并查找guid等于图像src的帖子。。。

    function mpb_remove_post_image( $content ){
    
        // strip slashes, I guess we need to readd slashes when we\'re done?
        $content = stripslashes($content);
    
        // get the first image src
        $image_src = get_first_image($content);
    
        // if there\'s an image src we can jam
        if(!is_null($image_src)){
    
            global $wpdb;
    
            // query the db for an attachment with this image
            //$thumb_id = $wpdb->get_var($wpdb->prepare("SELECT DISTINCT ID FROM $wpdb->posts WHERE guid=\'$image_src\'"));
            $result = $wpdb->get_results("SELECT ID, post_parent FROM {$wpdb->posts} WHERE guid =\'$image_src\'");
    
            $thumb_id = $result[0]->ID;         
            $post_id = $result[0]->post_parent;
    
            // set the featured image
            mpb_set_featured_image($thumb_id,$post_id);
            // update_post_meta( $post_id, \'_thumbnail_id\', $thumb_id );
    
        }
    
        // remove any images in the content
        $content = preg_replace("/<img[^>]+\\>/i", "", $content);
    
        $content = addslashes($content);
    
        return $content;
    }
    
    上面的代码引用了我编写的用于获取图像的函数。。。

    function get_first_image($html){
    
        require_once(\'simple_html_dom.php\');
    
        $post_dom = str_get_dom($html);
    
        // get the first image
        $first_img = $post_dom->find(\'img\', 0);   
    
        // if any images then return the src attribute
        if($first_img !== null) {
            return $first_img->src;
        }
    
        return null;
    }
    
    要设置特色图像。。。

    // set the featured image
    function mpb_set_featured_image( $thumb_id, $post_id ){
    
        update_post_meta( $post_id, \'_thumbnail_id\', $thumb_id );
    
    }
    
    我还尝试为save\\u post添加一个操作,但我在运行的函数中所做的任何操作似乎都会触发另一个再次运行save\\u post的钩子,因此它会变成一个无休止的循环。

    有人知道(即使是高水平的)我可以采取什么步骤来实现这一点吗?下面是我想做的。。。

    插入帖子时,1)获取第一个图像src 2)将其设置为自定义字段或将其设置为特色图像3)从帖子中删除图像。

    edit - 如果你通过wp管理员添加帖子,我应该提到我发布的代码确实有效。但如果您通过移动应用程序添加,则不会。

    2 个回复
    SO网友:Neerav

    为什么不使用两个挂钩,一个在保存邮件之前,一个在保存邮件之后?

    content\\u save\\u pre:附加此挂钩的函数将从内容中删除图像并将其存储在会话中/transient.

    save\\u post:使用此挂钩,您将拥有post的id。附加此挂钩的函数将为具有该id的帖子设置特色图像并删除会话/transient 数据

    或者,如果你想采用你的方法,我认为你应该使用post_name, 而不是guid, 从数据库检索帖子id。

    SO网友:chrismou

    不确定它在您的特定场景中是否有用,但可能值得查看get\\u the\\u image插件

    http://wordpress.org/extend/plugins/get-the-image/

    它会检查多个源以尝试查找要显示的图像-根据常见问题解答:

    它如何提取图像?

    通过自定义字段(您选择的一个字段)查找图像如果自定义字段未添加图像,请使用\\u post\\u缩略图()检查图像(WP 2.9的新图像功能)

  • 如果没有附加图像,它可以从您的帖子内容中提取图像(默认情况下关闭)

  • 结束

    相关推荐

    Functions file mods and CPU

    将添加类似于我在下面粘贴到函数的代码。php主题文件会降低Wordpress站点的速度,还是影响CPU?(谢谢)function remove_menu_items() { global $menu; $restricted = array(__(\'Links\'), __(\'Comments\'), __(\'Media\'), __(\'Plugins\'), __(\'Tools\'), __(\'Users\')); end ($menu);&#