O mnie

Plan

Potęga WordPress

O rany!

17 240 wtyczek | 239 mln pobrań

Cechy API systemu WordPress

Twórz wtyczki - Oszczędzaj swój czas

Wtyczka - Plugin

A WordPress Plugin is a program, or a set of one or more functions, written in the PHP scripting language, that adds a specific set of features or services to the WordPress weblog, which can be seamlessly integrated with the weblog using access points and methods provided by the WordPress Plugin Application Program Interface (API).
http://codex.wordpress.org/Writing_a_Plugin

Organizacja kodu wtyczki

Pomysł na wtyczkę

Źródło: http://www.billiesucherblog.com

Źródła inspiracji

Nazewnictwo i lokalizacje

Czas na pierwszą wtyczkę

Źródło: Eric Schmidt

Minimum wtyczki - nagłówek

<?php
/*
    Plugin Name: WordCamp Poznań 2011
    Plugin URI: http://wordpress.org/extend/plugins/wordcamp-poznan-2011/
    Description: Wtyczka na konferencję WordCamp Poznań 2011
    Author: Vokiel
    Version: 0.1
    Author URI: http://blog.vokiel.com/plugins/wordcamp-poznan-2011/
    Licence: GPL2
*/

class WordCampPoznan2011 {
    // WordCamPoznan2001 Plugin body
}
  • Koniecznym elementem jest tylko Plugin Name, reszta jest opcjonalna.
  • Istotne kodowanie - UTF-8

Minimum wtyczki - nagłówek (screen)

Sprawdzenie w bazie

SELECT `option_value` FROM `wp_options` WHERE `option_name`='active_plugins';

Serializowany

a:1:{i:0;s:41:"wordcamppoznan2011/wordcamppoznan2011.php";}

Deserializowany

Array(
    [0] => wordcamppoznan2011/wordcamppoznan2011.php
)
Źródło: http://www.progressionqt.com/

Tips&Tricks 1

// 1. Sprawdzenie czy klasa została już zdefiniowana
if ( !class_exists("WordCampPoznan2011") ){ // ok, droga wolna
    class WordCampPoznan2011 {
        function init(){}
    }
    $wcpoz = new WordCampPoznan2011();
    if ( $wcpoz ) {
        add_action('publish_post', array($wcpoz, 'init'));
    }
    // dla metod statycznych ( według PHP Callback)
    add_action('publish_post', array('WordCampPoznan2011', 'init'));
} else {
    /* nazwa zajęta i używana */ 
}
// 3. Nie ech***my poza funkcjami! (headers already sent by...)
echo 'oj';  
// Ominięcie znacznika zamykającego PHP (?>)

Niech coś robi!

Akcja
add_action( $hook, $function_to_add, $priority, $accepted_args );
remove_action( $hook, $function_to_add );
Filtr
add_filter( $hook, $function_to_add, $priority, $accepted_args );
remove_filter( $hook, $function_to_add );

priority (10) - 1-10: kolejność wg wartości 1 - pierwsza, 10 - ostatnia

accepted_args (1) - ilość akceptowanych argumentów funkcji

Pluggable Functions (40 szt.)

wp-includes/pluggable.php - lista: http://codex.wordpress.org/Pluggable_Functions

Przykład użycia add_action

if ( !class_exists("WordCampPoznan2011") ){ // ok, droga wolna
    class WordCampPoznan2011 {
        function init(){
            echo '<p class="pwrdby_wcpon">
		        Powerd by <strong>WordCampPoznan2011</strong>
		    </p>';
        }
    }
    $wcpoz = new WordCampPoznan2011();
    if ( $wcpoz ) {
        add_action('in_admin_footer', array($wcpoz, 'init'));
    }
}

Przykład użycia add_action (screen)

Przykład użycia add_filter

if ( !class_exists("WordCampPoznan2011") ){ // ok, droga wolna
    class WordCampPoznan2011 {
        function init($input){
            echo $input.'<p class="pwrdby_wcpon">
		        Powerd by <strong>WordCampPoznan2011</strong>
		    </p>';
        }
    }
    $wcpoz = new WordCampPoznan2011();
    if ( $wcpoz ) {
        add_filter('the_content', array($wcpoz, 'init'));
    }
}

Przykład użycia add_filter (screen)

Panel administracyjny

Panel administracyjny

Panel administracyjny (2)

class WordCampPoznan2011 {
    public static function init_admin_menu(){
        add_options_page('WordCamp Poznań 2011', 'WordCamp Poznań', 'manage_options',
            'wordcamp-poznan', array('WordCampPoznan2011', 'wordcamp_poznan_options')
        );
		
        add_menu_page( 'WordCamp Poznań 2011 - Main', 'WordCamp', 'manage_options', 
            'wordcamp', array('WordCampPoznan2011', 'wordcamp_poznan_mainmenu'),
            plugin_dir_url( __FILE__ ).'/img/wordpress-logo-16-blue.png'
        );
        add_submenu_page( 'wordcamp', 'WordCamp - Ustawienia', 'Ustawienia', 
            'manage_options', 'wordcamp-ustawienia', 
            array('WordCampPoznan2011', 'wordcamp_poznan_options')
        );
    }
    public static function wordcamp_poznan_options(){
        echo '<h2>WordCamp Poznań 2011 Admin Menu</h2>';
    }
    public static function wordcamp_poznan_mainmenu(){
        echo '<h2>WordCamp Poznań 2011 - Main Menu</h2>';
    }
}
add_action('admin_menu', array('WordCampPoznan2011','init_admin_menu'));

Panel administracyjny (screen)

Baza danych

Źródło: http://talk2pros.com/

Baza danych

Obsługa ustawień

Obsługa ustawień (2)

Obsługa ustawień (3)

Obsługa ustawień (4)

Obsługa ustawień (5)

Panel administracyjny (screen)

Dodatki

Źródło: http://www.myninjaplease.com

Dodawanie JavaScript i CSS

Link do ustawień na karcie wtyczek

System pomocy kontekstowej

public static $wcpoz;
public static function init_admin_menu(){

    WordCampPoznan2011::$wcpoz = add_options_page('WordCamp Poznań 2011', 
        'WordCamp Poznań', 'manage_options', 'wordcamp-poznan', 
        array('WordCampPoznan2011', 'wordcamp_poznan_options'));
			
    add_filter(
        'contextual_help', array('WordCampPoznan2011','contextual_help'), 10, 3
    );
}
public static function contextual_help($contextual_help, $screen_id, $screen){
    if ($screen_id == WordCampPoznan2011::$wcpoz) {
        $contextual_help = '<p>WordCamp Poznań 2011 - Pomoc kontekstowa.</p>';
    }
    return $contextual_help;
}

Kokpit

AdminBar

W WP 3.3 będzie to wyglądało inaczej

Dodatki (screen)

Wynik działania wtyczki (screen)

Macie dość?

Warto pisać wtyczki?

Źródło: http://www.ilvascellofantasma.it

Ulubione wtyczki

Źródła

Pytania?

Źródło: http://thumb.bestmemes.com

Dziękuję za uwagę!