我应该使用什么筛选器在媒体>添加新项中插入按钮

时间:2013-12-18 作者:jnbdz

我正在添加一种将媒体文件上载到WordPress的新方法。因此,我正在寻找一种方法来添加一个链接或按钮到上传新媒体页面。

推荐的过滤器是什么?或者有没有其他更好的方法来添加按钮?

以下是我试图完成的截图:

enter image description here

我添加了一个名为“其他选项”的按钮。

我还补充道:“另一种选择:另一种选择”。在最大上载文件大小之上。。。

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

操作后编辑插入已编辑的问题创建新的上载系统后,我想添加指向WP admin不同部分的按钮/链接:

管理栏中“Media”菜单上的子菜单“New”菜单上的子菜单“Media”中的按钮“Add New page”(添加新页面)(如操作屏幕截图中所示)

  • “Media Library”页面中页面标题附近的按钮非常简单,分别链接到,add_media_page$wp_admin_bar->add_node 功能。

    第三,有点难以获得,因为thta按钮是在core中硬编码的,可以通过javascript添加,但core中有一个钩子,\'post-plupload-upload-ui\', 这允许在拖动区域后输出一些内容,我认为这对您的范围也有好处(请参见此答案底部的屏幕截图)。

    第四个更难获得,因为没有挂钩,然而,就在Deafolt“Add New”按钮输出之前,代码中有一行:

    echo esc_html( $title );
    
    在哪里$title__(\'Media Library\').

    返回的值esc_html 可以使用更改esc_html 过滤器,因此您可以使用此过滤器输出自定义按钮的标记。但是,您应该注意只在适当的页面上运行过滤器,只针对所需的字符串,并在第一次运行后将其删除:否则,任何字符串都将传递给esc_html 将受到影响。

    请注意,这是一种棘手的方法,因此在WP的未来版本中,它将无法再工作,但在当前版本(3.8)和以前的版本(3.1及更新版本)中,它可以工作。

    I created a class, that handle all the 4 tasks. 该类作为一个独立的插件发布在这里,但它可能会被集成到您的插件中。当然,您必须自定义前3个功能。

    <小时>

    <?php
    /**
     * Plugin Name: Custom Upload UI
     */
    class CustomUploadUI {
    
      static function getLabel() {
        // change here the label of your custom upload button
        return \'Custom Add New Media\';
      }
    
      static function getUrl() {
        // change here the url of your custom upload button
        return add_query_arg( array(\'page\'=>\'my-custom-upload\'), admin_url(\'upload.php\') );
      }
    
      function render() {
        // this is the function that render your custom upload system
        if ( ! current_user_can( \'upload_files\' ) ) {
          echo \'<h2>Sorry, you are not allowed to upload files.</h2>\';
          return;
        }
      ?>
        <div class="wrap">
        <h2>Custom Upload System</h2>
        <p>Hi, I\'m a custom upload system</p>
        <p class="submit"><input name="submit" onClick="alert(\'Foo!\');return false;" id="submit" class="button button-primary" value="Upload Something" type="submit"></p>
        </div>
      <?php
      }
    
      function __construct() {
        add_action(\'load-upload.php\', array($this, \'indexButton\'));
        add_action(\'admin_menu\', array($this, \'submenu\') );
        add_action( \'wp_before_admin_bar_render\', array( $this, "adminBar" ) );
        add_action(\'post-plupload-upload-ui\', array($this, \'mediaButton\'));
      }
    
      function submenu() {
        add_media_page( self::getLabel(), self::getLabel(), \'upload_files\', \'my-custom-upload\', array($this, \'render\') ); 
      }
    
      function adminBar() {
        if ( ! current_user_can( \'upload_files\' ) || ! is_admin_bar_showing() ) return;
        global $wp_admin_bar;
        $wp_admin_bar->add_node( array(
          \'parent\' => \'new-content\',
          \'id\' => \'custom-upload-link\',
          \'title\' => self::getLabel(),
          \'href\' => self::getUrl()
        ) );
      }
    
    
      function mediaButton() {
        if ( current_user_can( \'upload_files\' ) ) {
          echo \'<div><p align="center">\';
          echo \'<input id="custom-browse-button" type="button" value="\' . self::getLabel() . \'" class="button" />\';
          echo \'</p></div>\';
          $this->mediaButtonScript();
        }
      }
    
      function mediaButtonScript() {
        if ( ! current_user_can( \'upload_files\' ) ) return;
      ?>
        <script>
        jQuery(document).on(\'click\', \'#custom-browse-button\', function(e) {
          e.preventDefault();
          window.location = \'<?php echo self::getUrl(); ?>\';
        });
        </script>
      <?php
      }
    
      function indexButton() {
        if ( ! current_user_can( \'upload_files\' ) ) return;
        add_filter( \'esc_html\', array(__CLASS__, \'h2Button\'), 999, 2 );
      }
    
      static function h2Button( $safe_text, $text ) {
        if ( ! current_user_can( \'upload_files\' ) ) return $safe_text;
        if ( $text === __(\'Media Library\') && did_action( \'all_admin_notices\' ) ) {
          remove_filter( \'esc_html\', array(__CLASS__, \'h2Button\'), 999, 2 );
          $format = \' <a href="%s" class="add-new-h2">%s</a>\';
          $mybutton = sprintf($format, esc_url(self::getUrl()), esc_html(self::getLabel()) );
          $safe_text .= $mybutton;
        }
        return $safe_text;
      }
    
    }
    
    $ui = new CustomUploadUI;
    
    媒体页面中的屏幕截图
  • Custom button add new media

    在媒体中添加新页面Custom button add new media

    媒体菜单的新建子菜单Custom button add new media

    管理栏中“+新建”菜单的新建子菜单Custom button add new media

    结束

    相关推荐

    添加wp_enQueue_media();导致问题

    我想在主题选项页面中添加媒体上载程序。如果我在选项页面中添加以下代码,媒体上传器在那里工作正常,但它会在标准帖子的特色图片中产生问题。它不允许我从那里选择任何图像。是不是因为我用错误的方式添加了它?if ( ! did_action( \'wp_enqueue_media\' ) ){ wp_enqueue_media(); } 下面是我正在使用的上传功能:$(\'#upload_img\').click(function(){ wp.media.edit