插入媒体库以上传图片(与任何帖子无关)

时间:2011-05-30 作者:JM at Work

My Old Question:

<我用旋转横幅做了一个主题,很普通。所以我想要一种用户选择图像的方法。我认为与其实现我自己的上传,不如允许用户使用媒体库,我该怎么做

到目前为止,我有如下内容

functions.php

// init wordpress media upload stuff ...
if (is_admin() && isset($_GET[\'page\']) && $_GET[\'page\'] == \'elem_opts\') {
  wp_enqueue_style(\'thickbox\');
  wp_enqueue_script(\'media-upload\');
  wp_enqueue_script(\'thickbox\');
  wp_register_script(\'elem_adm_js\', get_bloginfo(\'template_directory\') . \'/js/admin.js\', array(\'jquery\', \'media-upload\', \'thickbox\'));
  wp_enqueue_script(\'elem_adm_js\');
}

admin.js

jQuery(document).ready(function($) {
    $(\'#elem_upload_logo\').click(function() {
        tb_show(\'\', \'media-upload.php?type=image&amp;TB_iframe=true\');
        return false;
    });

    window.send_to_editor = function (html) {
        imgurl = $(\'img\', html).attr(\'src\');
        $(\'input[name=elem_opts[h_image]]\').val(imgurl);
        tb_remove();
    }
});
弹出媒体库上载thickbox,我可以单击选择文件,但当我尝试上载文件时,什么都没有发生。在Firebug中,我可以看到以下内容:

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

这里有3个链接可以帮助您入门,您的问题应该更清楚,您希望它像二十世纪的标题一样工作吗,使用自定义主题选项字段、类别?

How to use media upload on theme option page?
How can I add an image upload field directly to a custom write panel?
Attaching media to custom posts without editor
Creating an Image-Centric Custom Post Type?

SO网友:Anh Tran

1) 我认为您应该更改JS文件。这个send_to_editor 是将图像插入编辑器的默认WordPress处理程序。在代码中completely 更换了它。那可不酷。您应该备份它(我不确定这是否可以修复错误,但至少它可以让您的代码运行得更正常):

下面我将解释代码中的某些内容

jQuery(document).ready(function($) {
    $(\'#elem_upload_logo\').click(function() {
        var backup = window.send_to_editor, // backup the original \'send_to_editor\' function which adds images to the editor
            post_id = $(this).attr(\'rel\');  // get post ID

        // now you can change the default behavior
        window.send_to_editor = function (html) {
            // check the returned HTML code and do something with it

            // restore the default behavior
            window.send_to_editor = backup;
        }

        tb_show(\'\', \'media-upload.php?type=image&amp;TB_iframe=true&post_id=\' + post_id);
        return false;
    });
});
2)代码的另一个问题是html 可能有no img 标签。实际上,这取决于用户如何选择链接图像的方式(他们可以将图像链接到附件页、图像文件,也可以不链接到任何地方)。上述代码仅在图像链接到图像文件时有效。

您可以通过将图像插入编辑器来测试这种情况,更改图像链接的方式,您将看到实际返回的html。

3) 查看错误时我发现的最后一个问题是,您没有声明帖子ID。thinkbox媒体上传程序must 具有post ID。

要解决这个问题,可以使用一个简单的技巧:在PHP代码中#elem_upload_logo, 设置其rel="<?php echo $post->ID; ?>" 在JS脚本中,提取该属性并将其传递到媒体上传器的URL中(如上代码所示)。

结束

相关推荐