我开发了一个插件,可以使用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 );
}
如何检查图像是否已在媒体库中,如果已在,如何在上载文件夹中保存副本并将其附加到帖子?
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
. 如果你得到一个整数,那么我宁愿不需要复制。您可以直接将其附加到立柱上。这将为您的服务器节省一些空间。
希望以上答案有所帮助。
注意:我还没有测试函数代码。请在投入生产前进行测试。最好在评论处给出反馈。