Creazione di un'istanza wp_editor con pulsanti tinyMCE personalizzati
Esiste un modo per definire wp_editor()
con pulsanti tinyMCE personalizzati?
Ho notato che il riferimento della funzione wp_editor menziona che uno degli argomenti $settings
può essere tinymce (array) (opzionale) Carica TinyMCE, può essere utilizzato per passare impostazioni direttamente a TinyMCE utilizzando un array()
.
La mia pagina utilizza diverse istanze e vorrei aggiungere determinati pulsanti a determinate istanze.
Per esempio,
Istanza #1: Pulsanti standard
Istanza #2: grassetto, corsivo, ul + (personalizzato) pH, temp
Istanza #3: grassetto, corsivo, ul + (personalizzato) min_size, max_size
Qualcuno sa come potrei farlo se ho già registrato i pulsanti come plugin tinyMCE come descritto in questo tutorial?
MODIFICA
Ecco il codice che sto utilizzando nel mio file plugin per far funzionare questo:
function add_SF_buttons() {
// Se l'utente non può modificare post e pagine, esci
if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') )
return;
if ( get_user_option('rich_editing') == 'true') {
add_filter('mce_external_plugins', 'add_SF_buttons_plugins');
}
}
function add_SF_buttons_plugins($plugin_array) {
$plugin_array['pH'] = $this->plugin_url . '/js/tinymce_buttons/pH.js';
$plugin_array['pH_min'] = $this->plugin_url . '/js/tinymce_buttons/pH_min.js';
$plugin_array['pH_max'] = $this->plugin_url . '/js/tinymce_buttons/pH_max.js';
return $plugin_array;
}
-
if (isset($SpeciesProfile)) {
add_action( 'init' , array (&$SpeciesProfile, 'register_species' ));
add_action( 'init' , array( &$SpeciesProfile, 'register_species_taxonomies' ));
add_action( 'init', array (&$SpeciesProfile, 'add_SF_buttons' ));
}
-
<?php wp_editor( $distribution, 'distribution', array( 'theme_advanced_buttons1' => 'bold, italic, ul, pH, pH_min', "media_buttons" => false, "textarea_rows" => 8, "tabindex" => 4 ) ); ?>
Sfortunatamente, questo non funziona - l'editor sopra mostra semplicemente gli stessi pulsanti come ogni altra istanza nella pagina.
Grazie in anticipo,
Praticamente ci eri già, secondo la descrizione.
Ecco cosa potresti cercare per le istanze 2 e 3 (per l'istanza 1 puoi lasciare vuote le impostazioni per ottenere il set predefinito di pulsanti):
Istanza 2:
wp_editor(
$distribution,
'distribution',
array(
'media_buttons' => false,
'textarea_rows' => 8,
'tabindex' => 4,
'tinymce' => array(
'theme_advanced_buttons1' => 'bold, italic, ul, pH, temp',
),
)
);
Istanza 3 (che mostra ognuna delle 4 righe che puoi impostare per TinyMCE):
wp_editor(
$distribution,
'distribution',
array(
'media_buttons' => false,
'textarea_rows' => 8,
'tabindex' => 4,
'tinymce' => array(
'theme_advanced_buttons1' => 'bold, italic, ul, min_size, max_size',
'theme_advanced_buttons2' => '',
'theme_advanced_buttons3' => '',
'theme_advanced_buttons4' => '',
),
)
);
Ti consiglio di dare un'occhiata al file wp-includes/class-wp-editor.php
(in particolare alla funzione editor_settings
alla riga 126) per capire come WP analizza le impostazioni che usi all'interno della funzione wp_editor(). Inoltre, controlla questa pagina per comprendere meglio le funzionalità di TinyMCE e le sue opzioni di inizializzazione (che non credo siano pienamente supportate da WP).

Ciao amico. Grazie per la risposta. Ho aggiunto del codice al mio post originale che, a giudicare dalla tua risposta, dovrebbe funzionare - ma non è così. Potresti dare un'occhiata?

Mi sono dimenticato di racchiudere i parametri specifici di tinymce in un loro array. Ho modificato la risposta e aggiunto gli altri parametri che hai inserito nella tua domanda. Fammi sapere come va?

Tieni anche presente che altri (io!) vorrebbero sapere come fare questo da soli, quindi cerca di non trasformare la risposta in qualcosa di specifico solo per dunc. Puoi aggiungere link a qualsiasi documentazione rilevante di WP/TinyMCE?

Fantastico, sembra funzionare. Purtroppo i miei pulsanti no, ma questa è un'altra domanda :) Grazie tbuteler.

Prego! @TomJNowell, ho aggiunto un ultimo paragrafo con delle letture consigliate, grazie per il suggerimento!

Quasi dimenticavo di assegnarti il bounty :) C'è una nuova domanda qui se hai qualche idea: http://wordpress.stackexchange.com/questions/48782/registering-custom-tinymce-buttons-for-admin-area-to-work-with-custom-instance

puoi impostare i parametri tramite array nella funzione wp_editor(); un esempio
$settings = array(
'tinymce' => array(
'setup' => 'function (ed) {
tinymce.documentBaseURL = "' . get_admin_url() . '";
}',
),
'quicktags' => TRUE,
'editor_class' => 'frontend-article-editor',
'textarea_rows' => 25,
'media_buttons' => TRUE,
);
wp_editor( $content, 'article_content', $settings );
Puoi impostare i valori tramite array nel parametro 'tinymce',
'tinymce' => true, // carica TinyMCE, può essere usato per passare impostazioni direttamente a TinyMCE usando un array()
È anche possibile ottenere i parametri dei pulsanti:
theme_advanced_buttons1
, theme_advanced_buttons2
, theme_advanced_buttons3
, theme_advanced_buttons4
array( 'theme_advanced_buttons1' => 'bold, italic, ul, pH, temp' )
inoltre puoi usare un filter hook per creare pulsanti personalizzati, ecco un esempio
function fb_change_mce_options($initArray) {
// Stringa separata da virgole di tag estesi
// Stringa separata da virgole di elementi estesi
$ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';
if ( isset( $initArray['extended_valid_elements'] ) {
$initArray['extended_valid_elements'] .= ',' . $ext;
} else {
$initArray['extended_valid_elements'] = $ext;
}
// opzionale; imposta il parametro verify_html di TinyMCE
//$initArray['verify_html'] = false;
return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );
puoi anche filtrare i pulsanti direttamente; ogni riga ha un suo filtro:
mce_buttons
, mce_buttons_2
, mce_buttons_3
, mce_buttons_4
i seguenti parametri sono quelli predefiniti per l'esempio sul hook: tiny_mce_before_init
'mode' => 'specific_textareas'
'editor_selector' => 'theEditor'
'width' => '100%'
'theme' => 'advanced'
'skin' => 'wp_theme'
'theme_advanced_buttons1' => 'bold,italic,strikethrough,|,bullist,numlist,blockquote,|,justifyleft,justifycenter,justifyright,|,link,unlink,wp_more,|,spellchecker,fullscreen,wp_adv'
'theme_advanced_buttons2' => 'formatselect,underline,justifyfull,forecolor,|,pastetext,pasteword,removeformat,|,media,charmap,|,outdent,indent,|,undo,redo,wp_help'
'theme_advanced_buttons3' => ''
'theme_advanced_buttons4' => ''
'language' => 'de'
'spellchecker_languages' => 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,+German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv'
'theme_advanced_toolbar_location' => 'top'
'theme_advanced_toolbar_align' => 'left'
'theme_advanced_statusbar_location' => 'bottom'
'theme_advanced_resizing' => true
'theme_advanced_resize_horizontal' => false
'dialog_type' => 'modal'
'relative_urls' => false
'remove_script_host' => false
'convert_urls' => false
'apply_source_formatting' => false
'remove_linebreaks' => true
'gecko_spellcheck' => true
'entities' => '38,amp,60,lt,62,gt'
'accessibility_focus' => true
'tabfocus_elements' => 'major-publishing-actions'
'media_strict' => false
'paste_remove_styles' => true
'paste_remove_spans' => true
'paste_strip_class_attributes' => 'all'
'wpeditimage_disable_captions' => false
'plugins' => 'safari,inlinepopups,spellchecker,paste,wordpress,media,fullscreen,wpeditimage,wpgallery,tabfocus'
vedi questo link per maggiori informazioni su questo filtro.

Aggiorno questo dato che ho dovuto scavare nei file sorgente di WordPress
$settings = array(
'tinymce' => array(
'toolbar1' => 'bold, italic', // grassetto, corsivo
'toolbar2' => '',
),
'wpautop' => false, // disabilita l'inserimento automatico di paragrafi
'media_buttons' => false, // nasconde i pulsanti media
);
Penso che questo sia cambiato con TinyMCE 4.

$args = array(
'tinymce' => array(
'toolbar1' => 'grassetto,corsivo,sottolineato,separatore,allineaasinistra,allineacentro,allineaadestra,separatore,collegamento,rimuovicollegamento,annulla,ripeti',
'toolbar2' => '',
'toolbar3' => '',
),
);
wp_editor( $content, $editor_id, $args );
