检查WordPress媒体库中是否存在该图像

时间:2018-09-03 作者:Francesco Lo Cicero

我开发了一个插件,可以使用cron作业插入帖子。我正在使用此功能创建帖子缩略图:

function Generate_Featured_Image( $image_url, $post_id  ){
    $upload_dir = wp_upload_dir();
    $image_data = file_get_contents($image_url);
    $filename   = basename($image_url);

    if(wp_mkdir_p($upload_dir[\'path\']))
        $file = $upload_dir[\'path\'] . \'/\' . $filename;
    else
        $file = $upload_dir[\'basedir\'] . \'/\' . $filename;

    file_put_contents($file, $image_data);

    $wp_filetype = wp_check_filetype($filename, null );
    $attachment = array(
        \'post_mime_type\' => $wp_filetype[\'type\'],
        \'post_title\' => sanitize_file_name($filename),
        \'post_content\' => \'\',
        \'post_status\' => \'inherit\'
    );

    $attach_id = wp_insert_attachment( $attachment, $file, $post_id );
    require_once(ABSPATH . \'wp-admin/includes/image.php\');
    $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
    $res1 = wp_update_attachment_metadata( $attach_id, $attach_data );
    $res2 = set_post_thumbnail( $post_id, $attach_id );
}
如何检查图像是否已在媒体库中,如果已在,如何在上载文件夹中保存副本并将其附加到帖子?

1 个回复
SO网友:CodeMascot

听着,据我所知,你要做的事情主要有两种方式-

First 就是通过uploads 递归目录并搜索文件名和类型为的文件。如果找到该文件,则将其从那里复制,然后无需下载。But it\'s very costly regarding the resource and power it\'ll use. 当然,您可以实现它,但在这个领域,解决方案还有很长的路要走。递归搜索的主要思想是,有一些PHP库,通过这些库,您可以递归地列出目录中的文件,并检查文件是否存在。

Second 是WP的方式,我认为这对你的状况没有多大帮助。它只会检查图像是否在数据库中注册。功能代码在此处-

/**
 * If the image file is there.
 *
 * @param string $img The image name with extension after dot.
 *
 * @return bool|int
 */
function codemascot_if_the_image_is_there( $img ) {
    global $wpdb;
    $img = \'%/\' . $img;
    $sql = $wpdb->prepare(
        "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = \'_wp_attached_file\' AND meta_value = %s",
        $img
    );
    return $wpdb->get_var( $sql ) !== null ? $wpdb->get_var( $sql ) : false;
}
使用此函数如下codemascot_if_the_image_is_there(\'test.jpg\'). 它会给你一个帖子ID或者false 基于它运行的查询。对于您的情况,请通过$filename 作为参数。如果文件在内部,则会得到一个整数,否则false. 如果你得到一个整数,那么我宁愿不需要复制。您可以直接将其附加到立柱上。这将为您的服务器节省一些空间。

希望以上答案有所帮助。

注意:我还没有测试函数代码。请在投入生产前进行测试。最好在评论处给出反馈。

结束

相关推荐

Remove P tags from images

我使用的是WordPress 4.2.2,每次我向wysiwyg添加图像时,它都会将输出的图像包装在段落标记中。我需要去掉这些标签。我在网上找到的所有东西都是从2011年开始的,而且似乎都不起作用。我试着把东西放在函数中。php类:function filter_ptags_on_images($content){ return preg_replace(\'/<p>\\s*(<a .*>)?\\s*(<img .* \\/>)\\s*(<\\/a&g