我正在构建一个使用WordPress功能的自定义界面,我想要使用的特定区域是WordPress的媒体部分。我首先包括WordPress的核心文件:
$location = $_SERVER['DOCUMENT_ROOT'] . "/wordpress";
include($location.'/wp-config.php');
include($location.'/wp-load.php');
include($location.'/wp-includes/pluggable.php');
global $wpdb;
if( !isset($wpdb) )
{
include($location.'/wp-config.php');
include($location.'/wp-includes/wp-db.php');
}
在我使用的媒体文件中:wp_enqueue_media()
允许我在用户从其帐户上传媒体时访问媒体查看器。
我用来运行媒体请求的JS
脚本如下:
$('.add-media').on('click', function( event ){
var file_frame;
var wp_media_post_id = wp.media.model.settings.post.id; // Store the old id
event.preventDefault();
// If the media frame already exists, reopen it.
if ( file_frame ) {
file_frame.open();
return;
}
// Create the media frame.
file_frame = wp.media.frames.file_frame = wp.media({
title: jQuery( this ).data( 'uploader_title' ),
button: {
text: jQuery( this ).data( 'uploader_button_text' ),
},
multiple: true // Set to true to allow multiple files to be selected
});
// When an image is selected, run a callback.
file_frame.on( 'select', function() {
var selection = file_frame.state().get('selection');
selection.map( function( attachment ) {
attachment = attachment.toJSON();
// Do something with attachment.id and/or attachment.url here
$(".load-attachments").append('<div class="singleImg"><a href="'+attachment.url+'" class="shadowbox"><img src="'+attachment.url+'" width="100px" height="100px"/></a><input type="hidden" class="fileURL load-single-attachment" value="'+attachment.id+'"/><span class="removeImg remove"> X </span></div>');
$(".removeImg").bind('click', function(){
$(this).parent().remove();
});
});
});
// Finally, open the modal
file_frame.open();
});
这里的问题是,在运行add-media
事件时,wp
未定义。现在我不确定为什么会这样。有什么想法或建议吗?
答案 0 :(得分:0)
查看文档后,我无法弄清楚为什么会这样。但我找到了解决方案。使用wp_footer()
时会调用一些最终文件。如果没有这个,你的JavaScript文件都不会运行。
因此,将来如果您正在开发应用程序并希望使用WordPress核心功能,请确保在应用程序结束时包含wp_footer()
,以确保您不会遇到{{1} }未在wp
中定义。