PHP致命错误:调用未定义的函数Download_url()

时间:2011-05-20 作者:Wipqozn

首先,这里是全部错误:

PHP Fatal error:  Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562
我还将相关功能张贴在问题的底部。

我正在修改我公司网站的一个脚本,该脚本允许我们自动从我们的内容提供商检索和上传内容。由于他们组织XML的方式,我需要将与文章相关的图像与文章主体分开上传。我尝试使用media\\u sideload\\u image()来执行此操作,但收到了错误:

调用download\\u url并导致错误的函数(media\\u sideload\\u image()):

 PHP Fatal error:  Call to undefined function download_url() in /path/to/wordpress/wp-admin/includes/media.php on line 562
可以看出,我成功地加入了媒体。php——我的脚本的其余部分已经在该站点上实现,我在访问Wordpress文件时没有遇到任何其他问题。错误似乎与介质有关。php本身——我发现这很不寻常。

有什么办法可以解决这个问题吗?或者,如果您知道我可以使用的另一个函数,也将不胜感激。

无论如何,如果你需要关于这个问题的更多细节,尽管问吧。

/**
 * Download an image from the specified URL and attach it to a post.
 *
 * @since 2.6.0
 *
 * @param string $file The URL of the image to download
 * @param int $post_id The post ID the media is to be associated with
 * @param string $desc Optional. Description of the image
 * @return string|WP_Error Populated HTML img tag on success
 */
function media_sideload_image($file, $post_id, $desc = null) {
    if ( ! empty($file) ) {
        // Download file to temp location
        $tmp = download_url( $file );

        // Set variables for storage
        // fix file filename for query strings
        preg_match(\'/[^\\?]+\\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/\', $file, $matches);
        $file_array[\'name\'] = basename($matches[0]);
        $file_array[\'tmp_name\'] = $tmp;

        // If error storing temporarily, unlink
        if ( is_wp_error( $tmp ) ) {
            @unlink($file_array[\'tmp_name\']);
            $file_array[\'tmp_name\'] = \'\';
        }

        // do the validation and storage stuff
        $id = media_handle_sideload( $file_array, $post_id, $desc );
        // If error storing permanently, unlink
        if ( is_wp_error($id) ) {
            @unlink($file_array[\'tmp_name\']);
            return $id;
        }

        $src = wp_get_attachment_url( $id );
    }

    // Finally check to make sure the file has been saved, then return the html
    if ( ! empty($src) ) {
        $alt = isset($desc) ? esc_attr($desc) : \'\';
        $html = "<img src=\'$src\' alt=\'$alt\' />";
        return $html;
    }
}
在代码中调用media\\u sideload\\u image()的函数:

//Upload the image if it exists, and return the post_id
function upload_image($post_id, $image_url) {
    require_once(\'wp-admin/includes/media.php\');
    $image_url = \'http://admin.gkbusiness.com/gkbusiness/files/2011/04/LOGOGKMBUS1.jpg\';
    media_sideload_image($image_url, $post_id);
    return $post_id;
}

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

您必须包含/path/to/wordpress/wp admin/includes/file。php这个文件也可以作为媒体。php使用该文件中的函数download\\u url()。

SO网友:Chris Baker

Hows this:

function attach_image_url($file, $post_id, $desc = null) {
    require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
    require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
    require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
    if ( ! empty($file) ) {
        // Download file to temp location
        $tmp = download_url( $file );
        // Set variables for storage
        // fix file filename for query strings
        preg_match(\'/[^\\?]+\\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/\', $file, $matches);
        $file_array[\'name\'] = basename($matches[0]);
        $file_array[\'tmp_name\'] = $tmp;
        // If error storing temporarily, unlink
        if ( is_wp_error( $tmp ) ) {
            @unlink($file_array[\'tmp_name\']);
            $file_array[\'tmp_name\'] = \'\';
        }
        // do the validation and storage stuff
        $id = media_handle_sideload( $file_array, $post_id, $desc );
        // If error storing permanently, unlink
        if ( is_wp_error($id) ) {@unlink($file_array[\'tmp_name\']);}
        add_post_meta($post_id, \'_thumbnail_id\', $id, true);
    }
}
SO网友:Larzan

如果您不需要如此细粒度的解决方案,或者您的“外部”脚本中缺少其他功能,那么只需包含管理脚本即可。

因此,在应该使用WP功能的“外部”脚本的顶部,包括前端功能和管理的WP负载。用于后端/管理功能的php:

require_once (\'wp-load.php\');
require_once (\'wp-admin/includes/admin.php\');
这假设您的脚本位于WP根级别,如果不是,则必须调整路径。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。