Quelqu'un sait comment y parvenir?
Cela a quelque chose à voir avec les méta-boîtes, mais je ne peux tout simplement pas trouver la syntaxe appropriée.
Je me suis souvenu qu’une fois que j’ai fait cela, hier, j’ai trouvé où, mais ce code était ... mauvais. Donc aujourd'hui je l’ai peu amélioré et je vais partager. Avant de vouloir expliquer ce que je fais.
Tout d'abord, il y a 3 choses principales à faire:
La plupart des choses ont besoin de js, nous devons donc enqueje js dans les bonnes pages (post.php et post-new.php).
Le premier point ne peut pas peut être effectué via PHP, car le balisage de ces boutons est directement repris de la fonction wp_editor
, sans être traité par aucun filtre. Donc, la seule chance est de les ajouter via javascript.
2ème point, peut être facilement réalisé via PHP, en utilisant une fonction hooking the_editor
filter.
Le 3ème point est à nouveau réalisé via javascript.
Pour tout le code, j'ai créé un plugin simple contenant 3 fichiers:
gmet.php
- le fichier de plugin principalgmet.js
- le fichier contenant le javascriptgmet-content.php
- ce fichier contient le contenu de l'ongletJ'ai créé un autre fichier pour le contenu des onglets de cette manière, il est facile de le personnaliser, sans fouiller dans le code.
<?php namespace GMET;
/*
* Plugin Name: GM Editor Tab
* Author: Giuseppe Mazzapica
* Author URI: http://wordpress.stackexchange.com/users/35541/g-m
*
* Text Domain: gmet
*/
\add_action('admin_init', '\GMET\init');
function init() {
\load_plugin_textdomain( 'gmet', false, dirname( \plugin_basename( __FILE__ ) ) );
\add_action('admin_enqueue_scripts', '\GMET\scripts');
\add_filter('the_editor', '\GMET\content');
}
function scripts( $page ) {
if ( $page === 'post.php' || $page === 'post-new.php' ) {
$custom_css = "#content-gmet.active {
border-color: #ccc #ccc #f4f4f4; background-color: #f4f4f4; color: #555;
}";
wp_add_inline_style( 'colors', $custom_css );
\wp_enqueue_script('gmet', \plugins_url('/gmet.js', __FILE__ ) );
\wp_localize_script( 'gmet', 'gmetData', array(
'tabTitle' => __('My Custom Tab', 'gmet')
) );
}
}
function content( $content ) {
preg_match("/<textarea[^>]*id=[\"']([^\"']+)\"/", $content, $matches);
$id = $matches[1];
// only for main content
if( $id !== "content" ) return $content;
ob_start();
include( \plugin_dir_path( __FILE__ ) . 'gmet-content.php' );
return $content . ob_get_clean();
}
Il n'y a que 3 fonctions: la première configuration des crochets, la seconde ajouter le javascript dans la page, la troisième est responsable de l'ajout du contenu sur la page à onglet.
(function($) {
$(document).ready(function() {
var $bar = $('<div></div>');
$bar.addClass('quicktags-toolbar');
$wrap = $('#gmet_content_wrap');
$wrap.children().css('padding', '5px 15px');
$wrap.prepend($bar);
$('#wp-content-editor-tools #content-html').before(
'<a id="content-gmet" class="wp-switch-editor">' + gmetData.tabTitle + '</a>'
);
});
$(document).on('click', '#content-gmet', function(e) {
e.preventDefault();
var id = 'content';
var ed = tinyMCE.get(id);
var dom = tinymce.DOM;
$('#wp-content-editor-container, #post-status-info').hide();
dom.removeClass('wp-content-wrap', 'html-active');
dom.removeClass('wp-content-wrap', 'tmce-active');
$(this).addClass('active');
$('#gmet_content_wrap').show();
});
$(document).on('click', '#content-tmce, #content-html', function(e) {
e.preventDefault();
$('#content-gmet').removeClass('active');
$('#gmet_content_wrap').hide();
$('#wp-content-editor-container, #post-status-info').show();
});
})(jQuery);
Encore une fois 3 tâches: sur le document prêt j'installe quelques css et, le plus important, j'ajoute notre balisage de titre d'onglet à l'éditeur. Deuxième tâche exécutée lorsque l'utilisateur clique sur le titre de notre onglet: l'éditeur standard est masqué et notre contenu affiché. Dans l’éditeur standard masqué, j’ai copié et collé le code som à partir de wp-admin/js/editor.js
. La dernière tâche est la plus facile, quand on clique sur les titres d'onglets standards, je cache le contenu de nos onglets et supprime la classe 'active' de celle de titre.
<div id="gmet_content_wrap" class="wp-editor-container">
<!-- Everything you want to output should go inside this div -->
<h3>Hi there</h3>
<p>
<input type="text" class="regular-text" name="gmet_text" placeholder="Example" />
</p>
<p>
<textarea name="gmet_textarea" cols="100" id="gmet_textarea" rows="10"></textarea>
</p>
</div>
Ce fichier contient ce qui est montré dans un onglet. Ce n’est qu’un exemple, personnalisez-le à votre guise, n’oubliez pas d’ajouter tout ce qui se trouve dans le div wrapper.
Maintenant, créez simplement un dossier dans votre répertoire plugins, sauvegardez les 3 fichiers qu’il contient, puis allez sur votre dasboard et activez le plugin.
Tous les fichiers sont disponibles sous la forme Gist here .
Cela ne va pas être facile à faire. Ceci est codé en dur dans le noyau et n'a rien à voir avec les méta-boîtes.
Si vous inspectez le HTML pour ces onglets, vous pouvez voir des classes telles que wp-switch-editor switch-html and switch-tmce
. Si vous effectuez une recherche dans le code principal de ces classes, vous pourrez trouver où créer ces onglets.
Le plus difficile serait de disséquer le JavaScript qui le fait basculer et d’ajouter un support pour votre nouvel onglet.