WP 3.9'da TinyMCE4 nasıl özelleştirilir - stiller ve biçimler için eski yol artık çalışmıyor


10

WP 3.9'dan önce function.php içinde aşağıdaki iki filtreyi uyguladım:

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');

böylece paragraf biçimleri açılır menüsünde yalnızca p, h3 ve h4 gösterilirken, özel stiller açılır menüsünde "Başlık brüt", "Başlık klein" vb. gösterilir. Ama ne yazık ki wp ve tinymce artık wp 3.9'dan beri rahatsız etmiyor, şimdi sadece standart paragraf formatları açılır menüsünü görüyorum

paragraf

standart stiller biçimi açılır menüsünün yanı sıra:

stilleri

Şimdiye kadar herhangi bir kanca tinymce 4 güncelleme ile değişip değişmediği hakkında herhangi bir belge bulamadım. Saygılarımla Ralf

Güncelleme: Tamam biraz daha araştırma ve altındaki yorumlar dayalı sanırım bir şeyler anladım:

//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');


Hayır görmedim. Teşekkürler! Ancak maalesef burada açıklanan kodla, stili ve paragraf açılır menülerini yeniden şekillendirmek yerine sadece bir düğme oluşturmak mümkündür. Okuma ve araştırma yapmaya devam etmek zorunda.
ermarus

Orijinal menü öğelerini nasıl tutabileceğiniz ve bu öğeye style_select"Sınıflar" menüsünü nasıl ekleyebileceğiniz aşağıda açıklanmıştır. wordpress.stackexchange.com/questions/143689/…
Howdy_McGee

Yanıtlar:


19

Eğer bakarsanız class-wp-editor.php, kullandığınız filtrenin hala orada olduğunu göreceksiniz, ancak ayarlar farklıdır.

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 ),
                );

Tahmin ediyorum, ancak hedeflediğiniz dizi anahtarını değiştirmeniz gerekiyor formats.

EDIT Bunu yerinde bırakarak, OP bunun denediğini yapmadığını doğrular.

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');

Bunun tamamen test edilmediğini unutmayın, bu nedenle kilometreniz değişebilir. (Test edene kadar bir üretim sitesinde kullanmayın).

Devam ediyor

Biçimleri daha derin kazmak özel bir tinyMCE düğmesi gibi görünüyor. Bunu görebilirsiniz formatselectdüğme eklenir mce_buttons_2içinde class-wp-editor.php. Sonra bunu izledim 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'
        );

Bunu göz önünde bulundurarak, yeni hedefin (ideal olarak) değiştirmek editor.settings.block_formatsveya mce_buttons_2kendi özel sürümünüzü filtreleyip bu düğmeyi 2. kaldırmak olduğunu düşünüyorum .

Test edilmiş ve çalışıyor

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' );

Küçük uyarı : Açılır öğelerin stillerinin nereye ekleneceğinden emin değilim. TinyMCE örneğinde, "Kırmızı Başlık" seçeneği kırmızıdır. Bunu anlayamadım. Bunu yaparsanız, lütfen bana bildirin.


teşekkürler helga! Daha önce class-wp-editörüne de baktım. Ancak sözdiziminin ne olması gerektiğinden emin değildi (güncellenmiş tinymceapi için çok fazla wp ile ilgili dokümantasyon yok). şimdi önerinizi denedim. ilk snippet'lerimdeki gibi sonuçlar. TinyMCE, initin neye benzediğini umursamıyor. tinymce sitesinde ben sadece js özel biçimleri için bir örnek buldum ve ben wp ve php doğru adapte başarısız oldu: tinymce.com/tryit/custom_formats.php
ermarus

1
Büyük yardım, teşekkürler! Sadece block_formatsseçeneğin bir izleyemeyeceğini eklemek istedim ; . Kaydedilmiş yapılandırılabilir seçeneklerden değer inşa ediyordum ve bir iz vardı; listeyi bozdu. Umarım birilerini birkaç dakika kurtarır.
Adam Papa

1
@indextwo yup, burada çözdüm (olabildiğince iyi) ve karar verdim ... hey ... blog yazısı! Satır içi olarak tanımlasanız bile sınıfı bir açıklığa almazsınız? array( 'title' => 'Red text', 'inline' => 'span', 'styles' => array( 'color' => '#ff0000' ) ),?
helgatheviking

2
Biçim menüsündeki öğeler , renk stilleri hariç , stilleri editor-styles.css dosyasından devralır . Renk stillerini de istiyorsanız, bu kodu mce_mod () işlevine eklemek benim için çalıştı:unset($init['preview_styles']);
Dalton

1
@helgatheviking küçük uyarınızla ilgili olarak : belirlerseniz tüm stilleri etkinleştirebilirsiniz $init['preview_styles'] = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow';. Sanırım bu aslında daha açık bir şekilde de olsa, @Dalton tarafından önerilen ile aynı. Bu, tmce belgelerine
robro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.