web-dev-qa-db-fra.com

Quel filtre dois-je utiliser pour insérer un bouton à l'intérieur de Médias> Ajouter un nouveau

J'ajoute un nouveau moyen de télécharger un fichier multimédia sur WordPress. Je cherche donc un moyen d’ajouter un lien ou un bouton à la page Télécharger un nouveau média.

Quel est le filtre recommandé? Ou y a-t-il une autre meilleure solution pour ajouter un bouton?

Voici une capture d'écran de ce que j'essaie d'accomplir:

enter image description here

J'ai ajouté un bouton nommé: "Autre option".

J'ai aussi ajouté: "Une autre option: Autre option". En plus de la taille maximale du fichier de téléchargement ...

1
jnbdz

Edité après l'OP insérer une question modifiée


Une fois que vous créez un nouveau système de téléchargement, vous souhaitez ajouter un bouton/un lien vers une autre partie de WP admin:

  • Un sous-menu sur le menu "Media"
  • Un sous-menu dans le menu "Nouveau" de la barre d'administration
  • Un bouton dans la page Media> Add New (comme dans la capture d'écran OP)
  • Un bouton près du titre de la page dans la page "Médiathèque"

Les 2 premiers sont assez faciles, que respectivement, add_media_page et $wp_admin_bar->add_node les fonctions.

Le troisième, est un peu difficile à obtenir, car le bouton est codé en dur dans le noyau, il peut être ajouté via javascript, mais dans le noyau il y a un crochet 'post-plupload-upload-ui' , qui permet de sortir quelque chose après la zone de glissement, je pense que cela peut aussi être bon pour votre scope (voir la capture d'écran en bas de cette réponse).

Le quatrième est le plus difficile à obtenir, car il n'y a pas de crochet pour cela, cependant, juste avant la sortie du bouton "Ajouter nouveau", dans le code, il y a cette ligne:

echo esc_html( $title );

$title est __('Media Library').

La valeur renvoyée par esc_html peut être modifiée à l'aide du filtre esc_html. Vous pouvez donc utiliser ce filtre pour générer le balisage de votre bouton personnalisé. Cependant, vous devez faire attention à n'exécuter le filtre que sur la page appropriée, uniquement pour la chaîne souhaitée et le supprimer après la première exécution: sinon, toute chaîne transmise à esc_html sera affectée.

Notez que c'est un moyen délicat. Ainsi, dans les versions futures de WP, cela ne fonctionnera plus, mais avec les versions actuelles (3.8) et antérieures (3.1 et plus récentes).

J'ai créé une classe, qui gère les 4 tâches . La classe est affichée ici en tant que plugin autonome, mais il sera probablement utile de l’intégrer à votre plugin. Bien sûr, vous devez personnaliser les 3 premières fonctions.


<?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;

Captures d'écran

Dans la page média

Custom button add new media


Dans les médias> Ajouter une nouvelle page

Custom button add new media


Nouveau sous-menu du menu Média

Custom button add new media


Nouveau sous-menu du menu "+ Nouveau" dans la barre d'administration

Custom button add new media

1
gmazzap