我试图从远程url中抓取一个图像,该url是使用高级自定义字段中的文本字段添加的(下面的示例中是硬编码的),但我甚至不知道我使用的过程是否正确。我阅读了多个源代码,但使用了不同的功能和技术(media\\u sideload\\u image、wp\\u remote\\u get等),所以我有点困惑。
我使用了多个源代码来创建以下代码。
从这里开始的刮刀(在以下示例中单独测试,工作正常):https://www.ostraining.com/blog/coding/extract-image-php/
我在这篇文章中使用了一些信息:https://stackoverflow.com/questions/31368072/error-in-fetching-image-using-wp-remote-get-function
以及文件:https://codex.wordpress.org/Function_Reference/media_handle_sideload
下面是我的代码:
function generate_featured() {
global $post;
if($update == false) {
if ( !function_exists(\'media_handle_upload\') ) {
require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
}
$url = \'https://www.google.gr\';
$html = file_get_contents($url);
preg_match_all( \'|<img.*?src=[\\\'"](.*?)[\\\'"].*?>|i\',$html, $matches );
$image_url = $url . $matches[1][0];
$tmp = download_url( $image_url );
$file_array = array(
\'name\' => $post_id . \'_\' . $image_url . \'_\' . basename( $matches[1][0] ),
\'tmp_name\' => $tmp
);
// Check for download errors
if ( is_wp_error( $tmp ) ) {
@unlink( $file_array[\'tmp_name\'] );
return false;
}
$id = media_handle_sideload( $file_array, $post_id );
// Check for handle sideload errors.
if ( is_wp_error( $id ) ) {
@unlink( $file_array[\'tmp_name\'] );
return false;
}
// Set post thumbnail.
set_post_thumbnail( $post_id, $id );
}
}
add_action( \'save_post\', \'generate_featured\', 10, 3 );
问题是我没有看到在
wp-content/uploads
目录我暂时使用了
media_sideload_image($file, $post_id, $desc);
函数和文件正确创建,但无法将其设置为特征图像。
感谢您的帮助!
最合适的回答,由SO网友:Sally CJ 整理而成
代码对我有用;但我对函数的定义如下:function generate_featured( $post_id )
, 然后我把global $post;
; 最后(虽然这不是强制性的……),在$file_array
, 我这样设置名称:\'name\' => basename( $image_url ),
所以:(请注意,我故意不包括整个代码)
function generate_featured( $post_id, $post, $update ) {
//global $post;
if($update == false) {
...
$tmp = download_url( $image_url );
$file_array = array(
\'name\' => basename( $image_url ),
\'tmp_name\' => $tmp
);
...
// Set post thumbnail.
set_post_thumbnail( $post_id, $id );
}
}
add_action( \'save_post\', \'generate_featured\', 10, 3 );
请参见
https://developer.wordpress.org/reference/hooks/save_post/ 如果您在以下方面需要(进一步)帮助
save_post
钩