SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
Tworzenie wtyczek dla
TinyMCE 4.*
Tomasz Dziuda
!
WordUp Wrocław @ V.2014
Co warto wiedzieć o
TinyMCE?
• W WordPressie 3.9 zawarto TinyMCE 4.*
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• Łatwo go rozbudować o własne przyciski
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• Łatwo go rozbudować o własne przyciski
• WordPress posiada sporo filtrów dedykowanych
TinyMCE
• W WordPressie 3.9 zawarto TinyMCE 4.*
• TinyMCE posiada tryb “teeny”
• Łatwo go rozbudować o własne przyciski
• WordPress posiada sporo filtrów dedykowanych
TinyMCE
• Dokumentacja TinyMCE ssie ;)
Podstawowe filtry
mce_buttons[_2,_3,_4]
( http://codex.wordpress.org/Plugin_API/Filter_Reference/mce_buttons,_mce_buttons_2,_mce_buttons_3,_mce_buttons_4 )
teeny_mce_buttons
mce_external_languages
mce_external_plugins
mce_css
( http://codex.wordpress.org/Plugin_API/Filter_Reference/mce_css )
tiny_mce_before_init
( http://codex.wordpress.org/Plugin_API/Filter_Reference/tiny_mce_before_init )
Dodajemy przycisk do
edytora
add_action(
'admin_head',
‘wordup_add_button'
);
*.php
function wordup_add_button() {
!
!
!
!
!
!
!
!
!
!
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
!
!
!
!
!
!
!
!
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
if (
!current_user_can('edit_posts') &&
!current_user_can(‘edit_pages’)
)
return;
!
!
!
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
if (
!current_user_can('edit_posts') &&
!current_user_can(‘edit_pages’)
)
return;
if(!in_array($typenow, array('post', 'page')))
return;
!
!
!
!
}
*.php
function wordup_add_button() {
global $typenow;
if (
!current_user_can('edit_posts') &&
!current_user_can(‘edit_pages’)
)
return;
if(!in_array($typenow, array('post', 'page')))
return;
if (get_user_option('rich_editing') == 'true') {
add_filter(‘mce_external_plugins’, ‘wordup_add_plugin’);
add_filter('mce_buttons', 'wordup_register_button');
}
}
*.php
function wordup_add_plugin($plgs) {
$plgs['wordup_button'] = plugins_url('/btn.js', __FILE__);
return $plgs;
}
!
!
!
!
*.php
function wordup_add_plugin($plgs) {
$plgs['wordup_button'] = plugins_url('/btn.js', __FILE__);
return $plgs;
}
!
function wordup_register_button($buttons) {
array_push($buttons, "wordup_button");
return $buttons;
}
*.php
(function() {
!
!
!
!
!
!
!
!
})();
*.js
(function() {
tinymce.PluginManager.add('NAZWA',
!
!
!
!
!
);
})();
*.js
(function() {
tinymce.PluginManager.add('NAZWA',
function(ed, url) {
!
!
!
}
);
})();
*.js
(function() {
tinymce.PluginManager.add('NAZWA',
function(ed, url) {
ed.addButton( 'NAZWA', {
title: 'TYTUŁ',
icon: 'IKONA'
});
}
);
})();
*.js
icon: ‘wp-media-library’ => .mce-i-wp-media-library
( http://wp.dziudek.pl/dev/dodawanie-wlasnych-przyciskow-w-edytorze-tinymce-4 )
( http://melchoyce.github.io/dashicons/ )
Usuwamy przycisk z
edytora
function wordup_remove_buttons($buttons) {
unset($buttons[0]);
return $buttons;
}
!
!
!
!
function wordup_remove_buttons($buttons) {
unset($buttons[0]);
return $buttons;
}
!
add_filter(
'mce_buttons',
'wordup_remove_buttons'
);
Zmieniamy ikonę oraz
wstawiamy do edytora tekst
!
add_action(
'admin_enqueue_scripts',
‘wordup_add_css'
);
!
function wordup_add_css() {
wp_enqueue_style(
'wordup-tinymce',
plugins_url('/style.css', __FILE__)
);
}
i.mce-i-icon {
font: 400 20px/1 dashicons;
padding: 0;
vertical-align: top;
speak: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
margin-left: -2px;
padding-right: 2px
}
style.css
(function() {
tinymce.PluginManager.add(‘wordup_button',
function(editor, url) {
editor.addButton( ‘wordup_button', {
title: ‘My test button',
icon: ‘icon dashicons-dashboard’,
onclick: function() {
editor.insertContent('Hello World');
}
});
}
);
})();
Dajemy użytkownikowi
wybór
(function() {
tinymce.PluginManager.add(
'wordup_button',
function( ed, url ) {
ed.addButton( 'wordup_button', {
title: 'My test button',
type: 'menubutton',
icon: 'icon dashicons-dashboard',
menu: [{
text: 'Menu item I',
value: 'Text from menu item I',
icon: 'icon dashicons-wordpress',
onclick: function() {
ed.insertContent(this.value());
}
// ..
}]
});
});
})();
Zaawansowana
konfiguracja w popupie
(function() {
tinymce.PluginManager.add('wordup_button', function(editor, url){
editor.addButton( 'wordup_button', {
title: 'Własny nagłówek',
icon: 'icon dashicons-dashboard',
onclick: function() {
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł'
}],
onsubmit: function( e ) {
editor.insertContent( '<h3>' + e.data.title + '</h3>');
}
});
}
});
});
})();
editor.windowManager.open( {
title: 'Wstaw nagłówek',
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}]
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}, {
type: 'textbox',
name: 'id',
label: 'Nazwa kotwicy'
}]
!
!
!
!
!
!
!
!
!
!
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}, {
type: 'textbox',
name: 'id',
label: 'Nazwa kotwicy'
}, {
type: 'listbox',
name: 'level',
label: 'Poziom nagłówka',
'values': [
{text: '<h3>', value: '3'},
{text: '<h4>', value: '4'},
{text: '<h5>', value: '5'},
{text: '<h6>', value: '6'}
]
}]
!
!
!
!
});
editor.windowManager.open( {
title: 'Wstaw nagłówek',
body: [{
type: 'textbox',
name: 'title',
label: 'Tytuł',
}, {
type: 'textbox',
name: 'id',
label: 'Nazwa kotwicy'
}, {
type: 'listbox',
name: 'level',
label: 'Poziom nagłówka',
'values': [
{text: '<h3>', value: '3'},
{text: '<h4>', value: '4'},
{text: '<h5>', value: '5'},
{text: '<h6>', value: '6'}
]
}],
onsubmit: function( e ) {
editor.insertContent( '<h' + e.data.level + ' id="' + e.data.id + '">' +
e.data.title + '</h' + e.data.level + '>');
}
});
Wsparcie dla
Wielojęzyczności
wp_localize_script
wp_localize_script
function wordup_add_button_lang($loc) {
$loc['wordup_button'] =
plugin_dir_path(__FILE__).'lang.php';
return $loc;
}
!
add_filter(
'mce_external_languages',
‘wordup_add_button_lang'
);
<?php
!
if (!defined('ABSPATH')) exit;
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
!
!
!
!
!
!
!
!
!
!
!
!
!
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
!
!
!
!
!
!
!
!
!
}
!
!
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
$strings = array(
'label' => __('My test’, 'wordup_button'),
'msg' => __('Hello World!!!!', 'wordup_button')
);
!
!
!
!
}
!
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
$strings = array(
'label' => __('My test’, 'wordup_button'),
'msg' => __('Hello World!!!!', 'wordup_button')
);
!
$locale = _WP_Editors::$mce_locale;
$translated = 'tinyMCE.addI18n("' . $locale .
'.wordup_button", ' . json_encode( $strings ) . ");n";
!
return $translated;
}
!
<?php
!
if (!defined('ABSPATH')) exit;
!
if (!class_exists( '_WP_Editors' ))
require( ABSPATH . WPINC . '/class-wp-editor.php' );
!
function wordup_button_translation() {
$strings = array(
'label' => __('My test’, 'wordup_button'),
'msg' => __('Hello World!!!!', 'wordup_button')
);
!
$locale = _WP_Editors::$mce_locale;
$translated = 'tinyMCE.addI18n("' . $locale .
'.wordup_button", ' . json_encode( $strings ) . ");n";
!
return $translated;
}
!
$strings = wordup_button_translation();
editor.getLang('OBIEKT.KLUCZ')
(function() {
tinymce.PluginManager.add(
'wordup_button',
function( editor, url ) {
editor.addButton( 'wordup_button', {
title: editor.getLang('wordup_button.label'),
icon: 'icon dashicons-dashboard’,
onclick: function() {
editor.insertContent(
editor.getLang(‘wordup_button.msg’)
);
}
});
}
);
})();
Dodatkowe przykłady
Dodawanie przycisków w trybie fullscreen
Kontrolka styleselect
TinyMCE w sekcji komentarzy
Wszystkie materiały:
!
http://wp.dziudek.pl/kategorie/tinymce
Przykłady do Pobrania
Kontakt
• @dziudek
• dziudek@gmail.com
• wp.dziudek.pl
• zebymniezapomnial.tumblr.com
Pytania?

Contenu connexe

Tendances

Form Script
Form ScriptForm Script
Form Scriptlotlot
 
Un juego creado en php
Un juego creado en phpUn juego creado en php
Un juego creado en phpErwin Lobo
 
Concevoir un thème pour Wordpress
Concevoir un thème pour WordpressConcevoir un thème pour Wordpress
Concevoir un thème pour WordpressJean-Luc Houedanou
 
WordPress Customizer
WordPress CustomizerWordPress Customizer
WordPress Customizerslicejack
 
Intro to jQuery UI
Intro to jQuery UIIntro to jQuery UI
Intro to jQuery UIappendTo
 
スマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobileスマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobileManabu Uekusa
 
New text document (2) 2
New text document (2) 2New text document (2) 2
New text document (2) 2raj lex
 
Pianist and composer Jeff Kowalkowski releases strong new trio album
Pianist and composer Jeff Kowalkowski releases strong new trio albumPianist and composer Jeff Kowalkowski releases strong new trio album
Pianist and composer Jeff Kowalkowski releases strong new trio albumirwinvifxcfesre
 
Tjejer kodar 100 - Dag 2 - HTML & CSS
Tjejer kodar 100 - Dag 2 - HTML & CSSTjejer kodar 100 - Dag 2 - HTML & CSS
Tjejer kodar 100 - Dag 2 - HTML & CSSEmil Stenström
 
QCON SP 2014: 10 dicas de desempenho para apps mobile hibridas
QCON SP 2014: 10 dicas de desempenho para apps mobile hibridasQCON SP 2014: 10 dicas de desempenho para apps mobile hibridas
QCON SP 2014: 10 dicas de desempenho para apps mobile hibridasLoiane Groner
 
はじめてのChrome extension
はじめてのChrome extensionはじめてのChrome extension
はじめてのChrome extensionyoshikawa_t
 

Tendances (13)

Form Script
Form ScriptForm Script
Form Script
 
Blospot
BlospotBlospot
Blospot
 
Un juego creado en php
Un juego creado en phpUn juego creado en php
Un juego creado en php
 
Web components v1 intro
Web components v1 introWeb components v1 intro
Web components v1 intro
 
Concevoir un thème pour Wordpress
Concevoir un thème pour WordpressConcevoir un thème pour Wordpress
Concevoir un thème pour Wordpress
 
WordPress Customizer
WordPress CustomizerWordPress Customizer
WordPress Customizer
 
Intro to jQuery UI
Intro to jQuery UIIntro to jQuery UI
Intro to jQuery UI
 
スマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobileスマホウェブの本命 jQueryMobile
スマホウェブの本命 jQueryMobile
 
New text document (2) 2
New text document (2) 2New text document (2) 2
New text document (2) 2
 
Pianist and composer Jeff Kowalkowski releases strong new trio album
Pianist and composer Jeff Kowalkowski releases strong new trio albumPianist and composer Jeff Kowalkowski releases strong new trio album
Pianist and composer Jeff Kowalkowski releases strong new trio album
 
Tjejer kodar 100 - Dag 2 - HTML & CSS
Tjejer kodar 100 - Dag 2 - HTML & CSSTjejer kodar 100 - Dag 2 - HTML & CSS
Tjejer kodar 100 - Dag 2 - HTML & CSS
 
QCON SP 2014: 10 dicas de desempenho para apps mobile hibridas
QCON SP 2014: 10 dicas de desempenho para apps mobile hibridasQCON SP 2014: 10 dicas de desempenho para apps mobile hibridas
QCON SP 2014: 10 dicas de desempenho para apps mobile hibridas
 
はじめてのChrome extension
はじめてのChrome extensionはじめてのChrome extension
はじめてのChrome extension
 

Plus de Tomasz Dziuda

Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaTomasz Dziuda
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Tomasz Dziuda
 
Wtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinWtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinTomasz Dziuda
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendiumTomasz Dziuda
 
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówJak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówTomasz Dziuda
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaTomasz Dziuda
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoTomasz Dziuda
 
REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaTomasz Dziuda
 
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywówContributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywówTomasz Dziuda
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤Tomasz Dziuda
 
Jak nadążyć za światem front endu
Jak nadążyć za światem front enduJak nadążyć za światem front endu
Jak nadążyć za światem front enduTomasz Dziuda
 
Statycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławStatycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławTomasz Dziuda
 
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceMotywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceTomasz Dziuda
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaTomasz Dziuda
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaTomasz Dziuda
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Tomasz Dziuda
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayTomasz Dziuda
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Tomasz Dziuda
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsTomasz Dziuda
 

Plus de Tomasz Dziuda (20)

Wtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp WarszawaWtyczkowe kompendium - WordUp Warszawa
Wtyczkowe kompendium - WordUp Warszawa
 
Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12Wtyczkowe Kompendium - WordUp Łódź #12
Wtyczkowe Kompendium - WordUp Łódź #12
 
Trello w praktyce
Trello w praktyceTrello w praktyce
Trello w praktyce
 
Wtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp LublinWtyczkowe Kompendium - WordUp Lublin
Wtyczkowe Kompendium - WordUp Lublin
 
Wtyczkowe kompendium
Wtyczkowe kompendiumWtyczkowe kompendium
Wtyczkowe kompendium
 
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp KrakówJak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
Jak Twoja strona moze wygenerować niespodziewane koszta? WordUp Kraków
 
Jak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane kosztaJak Twoja strona może wygenerować niespodziewane koszta
Jak Twoja strona może wygenerować niespodziewane koszta
 
REST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp TrójmiastoREST API - teoria i praktyka - WordUp Trójmiasto
REST API - teoria i praktyka - WordUp Trójmiasto
 
REST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp WarszawaREST API - teoria i praktyka - WordUp Warszawa
REST API - teoria i praktyka - WordUp Warszawa
 
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywówContributor Day - WordCamp Lublin 2017 - przegląd motywów
Contributor Day - WordCamp Lublin 2017 - przegląd motywów
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤
 
Jak nadążyć za światem front endu
Jak nadążyć za światem front enduJak nadążyć za światem front endu
Jak nadążyć za światem front endu
 
Statycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET WrocławStatycznie czy dynamicznie - infoMEET Wrocław
Statycznie czy dynamicznie - infoMEET Wrocław
 
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp KatowiceMotywy dla WordPressa - historia prawdziwa - WordUp Katowice
Motywy dla WordPressa - historia prawdziwa - WordUp Katowice
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia Prawdziwa
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training Day
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0
 
Webinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administratorsWebinar: 5 Tricks for WordPress web administrators
Webinar: 5 Tricks for WordPress web administrators
 

Tworzenie wtyczek dla TinyMCE 4.* - WordUp Wrocław