Avant WP 3.9, les deux filtres suivants ont été appliqués dans le fichier functions.php:
function my_mce_buttons_2( $buttons ) {
array_unshift( $buttons, 'styleselect' );
return $buttons;
}
add_filter('mce_buttons_2', 'my_mce_buttons_2');
function mce_mod( $init ) {
$init['theme_advanced_blockformats'] = 'p,h3,h4';
$init['theme_advanced_styles'] = "Header gross=mus-bi news-single-bighead; Header klein=mus-bi news-single-smallhead; Link=news-single-link; List Items=news-single-list";
return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');
de sorte que la liste déroulante des formats de paragraphe affiche uniquement p, h3 et h4, tandis que la liste déroulante des styles personnalisés indique "En-tête brut", "En-tête klein", etc. Mais malheureusement, wp et tinymce ne se dérangent plus depuis wp 3.9, je ne vois plus que le menu déroulant des formats de paragraphe standard
ainsi que la liste déroulante des formats de styles standard:
Jusqu'à présent, je n'ai trouvé aucun document indiquant si des points d'ancrage ont été modifiés avec la mise à jour vers tinymce 4. Quelqu'un le sait? Cordialement Ralf
Mise à jour: Ok sur la base d'un peu plus de recherche et des commentaires ci-dessous, je suppose que j'ai compris les choses:
//Creating the style selector stayed the same
function my_mce_buttons( $buttons ) {
array_unshift( $buttons, 'styleselect' );
return $buttons;
}
add_filter('mce_buttons', 'my_mce_buttons');
function mce_mod( $init ) {
//theme_advanced_blockformats seems deprecated - instead the hook from Helgas post did the trick
$init['block_formats'] = "Paragraph=p; Heading 3=h3; Heading 4=h4";
//$init['style_formats'] doesn't work - instead you have to use tinymce style selectors
$style_formats = array(
array(
'title' => 'Header 3',
'classes' => 'mus-bi news-single-bighead'
),
array(
'title' => 'Header 4',
'classes' => 'mus-bi news-single-smallhead'
),
array(
'title' => 'Link',
'block' => 'a',
'classes' => 'news-single-link',
'wrapper' => true
)
);
$init['style_formats'] = json_encode( $style_formats );
return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');
Si vous regardez dans class-wp-editor.php
, vous constaterez que le filtre que vous utilisez est toujours là, mais les paramètres sont différents.
self::$first_init = array(
'theme' => 'modern',
'skin' => 'lightgray',
'language' => self::$mce_locale,
'formats' => "{
alignleft: [
{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'left'}},
{selector: 'img,table,dl.wp-caption', classes: 'alignleft'}
],
aligncenter: [
{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'center'}},
{selector: 'img,table,dl.wp-caption', classes: 'aligncenter'}
],
alignright: [
{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'right'}},
{selector: 'img,table,dl.wp-caption', classes: 'alignright'}
],
strikethrough: {inline: 'del'}
}",
'relative_urls' => false,
'remove_script_Host' => false,
'convert_urls' => false,
'browser_spellcheck' => true,
'fix_list_elements' => true,
'entities' => '38,amp,60,lt,62,gt',
'entity_encoding' => 'raw',
'keep_styles' => false,
'paste_webkit_styles' => 'font-weight font-style color',
// Limit the preview styles in the menu/toolbar
'preview_styles' => 'font-family font-size font-weight font-style text-decoration text-transform',
'wpeditimage_disable_captions' => $no_captions,
'wpeditimage_html5_captions' => current_theme_supports( 'html5', 'caption' ),
'plugins' => implode( ',', $plugins ),
);
Je devine, mais je pense que vous devez changer la clé de tableau que vous ciblez en formats
.
EDITLaisser ceci en place, mais le PO confirme que cela ne fait pas ce qu’il tente.
function mce_mod( $init ) {
$init['formats'] = "{
alignleft: [
{selector: 'p,h3,h4,td,th,div,ul,ol,li', styles: {textAlign:'left'}},
{selector: 'img,table,dl.wp-caption', classes: 'alignleft'}
],
aligncenter: [
{selector: 'p,h3,h4,td,th,div,ul,ol,li', styles: {textAlign:'center'}},
{selector: 'img,table,dl.wp-caption', classes: 'aligncenter'}
],
alignright: [
{selector: 'p,h3,h4,td,th,div,ul,ol,li', styles: {textAlign:'right'}},
{selector: 'img,table,dl.wp-caption', classes: 'alignright'}
],
strikethrough: {inline: 'del'}
}";
return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');
Gardez à l'esprit que ceci est totalement non testé, donc votre kilométrage peut varier. (Et n'utilisez pas sur un site de production avant de l'avoir testé).
Continuer
En creusant plus profondément les formats, cela ressemble à un bouton tinyMCE personnalisé. Vous pouvez voir que le bouton formatselect
est ajouté à mce_buttons_2
dans le class-wp-editor.php
. Et puis j'ai suivi cela pour tinymce.js
:
editor.addButton('formatselect', function() {
var items = [], blocks = createFormats(editor.settings.block_formats ||
'Paragraph=p;' +
'Address=address;' +
'Pre=pre;' +
'Heading 1=h1;' +
'Heading 2=h2;' +
'Heading 3=h3;' +
'Heading 4=h4;' +
'Heading 5=h5;' +
'Heading 6=h6'
);
Dans cet esprit, je pense que la nouvelle cible serait de 1. (idéalement) changer le editor.settings.block_formats
ou 2. supprimer ce bouton en filtrant mce_buttons_2
et en ajoutant votre propre version personnalisée.
Testé et fonctionnel
function mce_mod( $init ) {
$init['block_formats'] = 'Paragraph=p;Heading 3=h3;Heading 4=h4';
$style_formats = array (
array( 'title' => 'Bold text', 'inline' => 'b' ),
array( 'title' => 'Red text', 'inline' => 'span', 'styles' => array( 'color' => '#ff0000' ) ),
array( 'title' => 'Red header', 'block' => 'h1', 'styles' => array( 'color' => '#ff0000' ) ),
array( 'title' => 'Example 1', 'inline' => 'span', 'classes' => 'example1' ),
array( 'title' => 'Example 2', 'inline' => 'span', 'classes' => 'example2' )
);
$init['style_formats'] = json_encode( $style_formats );
$init['style_formats_merge'] = false;
return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');
function mce_add_buttons( $buttons ){
array_splice( $buttons, 1, 0, 'styleselect' );
return $buttons;
}
add_filter( 'mce_buttons_2', 'mce_add_buttons' );
Petite mise en garde : Je ne sais pas où ajouter les styles pour les éléments déroulants eux-mêmes. Dans l'exemple TinyMCE, l'option "Headline rouge" est en rouge. Je ne pouvais pas comprendre cela. Si vous le faites, s'il vous plaît laissez-moi savoir.