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:
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 ...
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:
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 );
où $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;