WordPress开发中如何将PHP获取的分类图片数据传递到JavaScript文件
问题原因
get_queried_object_id()是WordPress面向前端主查询设计的函数,后台分类编辑页面不会初始化对应的查询对象,调用该函数会返回0,自然无法获取到对应分类的元数据,导致customUploads输出为空。- 你当前使用
admin_footer钩子加载脚本,没有做页面范围限制,所有后台页面都会加载这段无效脚本,也不符合WordPress开发规范。
解决方法
调整脚本加载逻辑,在后台分类编辑页正确获取当前分类ID再传递数据,修正后的代码如下:
function image_uploader_js() { // 校验当前页面为分类编辑页 $current_screen = get_current_screen(); // 如果你用的是自定义分类法,把下方的category替换为对应分类法的别名即可 if ($current_screen->base !== 'term' || $current_screen->taxonomy !== 'category') { return; } // 后台分类编辑页的分类ID通过URL参数tag_ID传递,直接读取即可 $term_id = isset($_GET['tag_ID']) ? intval($_GET['tag_ID']) : 0; if (!$term_id) { return; } wp_register_script('image_file_uploader_js', get_template_directory_uri() . '/js/image_uploader.js', array('jquery', 'media-upload'), '1.0', true); wp_enqueue_script('image_file_uploader_js'); $image_data = get_term_meta($term_id, 'custom_image_data', true); wp_localize_script('image_file_uploader_js', 'customUploads', array( // 空数据时返回默认对象,避免JS读取属性时报错 'imageData' => $image_data ? $image_data : (object)['id' => 0, 'url' => ''] )); } // 替换为官方推荐的后台脚本加载钩子 add_action('admin_enqueue_scripts', 'image_uploader_js');
补充说明
如果是未保存的新建分类页面,分类ID还未生成,此时imageData返回默认空值属于正常逻辑,等分类保存后重新进入编辑页就能读取到已存储的图片数据。
内容的提问来源于stack exchange,提问作者82046501734
相关产品推荐
相关产品推荐

