有没有办法将wordpress操作和过滤器限制到我的插件管理子菜单页面?

时间:2014-07-02 13:47:48

标签: wordpress-plugin wordpress


我正在开发一个插件,其中部分功能是图片上传。我设法添加操作和过滤器,更改上传目标文件夹,重命名上传文件,添加两个新尺寸,以及取消设置默认的wordpress图像尺寸。

现在,这里的一切都很好,但我有一个很大的问题:
即使我在WP媒体库的帮助下上传图像,所有这些设置仍然有效。

我希望这些操作和过滤器仅在用户在我的插件管理页面上使用上传器时应用。我想避免使用不必要的图像版本来污染网络空间(我的插件只会使用由我和原始版本定义的尺寸)我希望将文件保存在我的插件创建的上传子文件夹中,但仅限于用户是从插件管理页面上传。
换句话说:

  1. 如果用户从我的插件管理菜单上传图片 - >应用操作和过滤器。
  2. 如果用户从标准wordpress媒体菜单页面上传图片 - >不要应用操作/过滤器。

  3. 我尝试使用以下方法解决我的问题:

    $screen = get_current_screen();
    if ( in_array( $screen->id, array( 'my-admin-submenu-slug' ))) {
    
       _code_goes_here_
    
    }
    

    但它失败了。结果在我的上传表单输入中是“假的”,所以我觉得slugs不是在这里比较的正确信息,或者我遗漏了一些东西。

    这个问题有解决办法吗?我花了最近3天谷歌搜索并尝试提出解决方案,没有。


    更新

    我试过这个:
    if ($_REQUEST['page'] == 'bpc-add-products'){ echo '<p>Blebleblebleble</p>'; add_filter( 'image_make_intermediate_size', 'bpc_rename_prod_images' ); add_action( 'init', 'bpc_addimagesizes' ); add_filter( 'intermediate_image_sizes_advanced', 'bpc_filter_image_sizes' ); }
    结果:echo只打印在bpc-add-products页面上 - 好吧,这意味着我的IF工作。但过滤器和操作完全被忽略。

    我也尝试添加页面后缀来挂钩名称,例如:
    add_filter( 'image_make_intermediate_size-my-plugin-name_page_bpc-add-products', 'bpc_rename_prod_images' );
    没有什么:(我没有想法......


    更新#2

    我已经设法通过两个钩子解决了我的问题的上传目录部分:

    add_filter('wp_handle_upload_prefilter', 'pre_upload_function', 2);

    - 用于添加与功能相关的upload_dir过滤器,该功能更改上传文件的目标文件夹

    add_filter('wp_handle_upload', 'post_upload_function', 2);

    - 用于在上传后删除upload_dir过滤器,因此当您使用Wordpress Media菜单时,您的上传将登陆默认文件夹


1 个答案:

答案 0 :(得分:0)

以下钩子允许在指定的管理页面上添加操作和过滤器,它在WP加载过程中很早就运行了:

add_action( 'load-PLUGIN_HOOK', function() {
    // Add plugin only filters and actions
});

获取插件钩子:

add_action( 'admin_menu', function () {
    $hook = add_menu_page( /* ETC */ );
    wp_die( $hook );
});