Att utveckla plugins Christian Ohlsson 1
Vad är ett plugin? Ett plugin till WordPress är ett PHP-skript som utökar eller förändrar funktionaliteten i WordPress kärna Helt enkelt: man använder plugins för att lägga till nya features i WP Christian Ohlsson 2
http://wordpress.org/plugins/ Christian Ohlsson 3
Typer och status på plugins Active Inactive Must-Use Drop-ins Christian Ohlsson 4
Typer och status på plugins Active Plugin är aktivt och körs I WP Inactive Plugin är installerat med ej aktivt. Koden I pluginet körs ej Must-Use Alla plugins i wp-content/mu-plugins. Laddas automatiskt. Enda sättet att deaktivera är att ta bort Drop-ins Kärnfunktionalitet I WP kan ersättas av dessa plugins advanced-cache-php Advanced cachehantering db.php Skapa egna databasklasser maintenance.php Skapa egna maintenance meddelande sunrise.php Mappa domäner Christian Ohlsson 5
Header på plugin <?php /* * Plugin Name: Mitt Fina Plugin * Plugin URI: http://example.com/mina-wp-plugins/ * Description: Kort beskrivning på mitt plugin * Version: 1.0 * Author: Christian Ohlsson * Author URI: http://example.com * License: GPLv2 */?> Christian Ohlsson 6
Nu kan det aktiveras! Christian Ohlsson 7
Ordning och reda! Får att få till ett kodmässigt snyggt plugin finns några saker du ska tänka på Prefixa allt! Organisera och strukturera dina filer! Christian Ohlsson 8
Prefixa allt! update_option() // Dåligt funktionsnamn mitt_plugin_update_option() //Bra funktionsnamn $settings $mitt_plugin_settings // Dåligt variabelnamn // Bra variabelnamn Christian Ohlsson 9
Organisera och strukturera dina filer! /unikt-namn-på-plugin unikt-namn-på-plugin.php uninstall.php readme.txt screenshot-1.png /js /css /includes /images Christian Ohlsson 10
Håll ordning på sökvägar Lokala sökvägar <?php // Visa lokal sökväg till min plugin-katalog echo plugin_dir_path( FILE );?> Visar: /public_html/wp-content/plugins/mitt-plugin/ Christian Ohlsson 11
Håll ordning på sökvägar <?php // Visa den lokala sökvägen till min includes/functions.php fil?> echo plugin_dir_path( FILE ). includes/functions.php ; Visar: /public_html/wp-content/plugins/mitt-plugin/includes/functions.php FILE är en magisk PHP-konstant som innehåller hela sökvägen och filnamnet på aktuell fil Christian Ohlsson 12
Håll ordning på sökvägar URL sökvägar <?php // Visa URL till images/icon.png echo plugins_url( 'images/icon.png', FILE );?> Visar: http://example.com/wp-content/plugins/mitt-plugin/images/icon.png Christian Ohlsson 13
Fördelar med plugins_url() Stödjer katalogen mu-plugins Autodetekterar SSL Är det på blir URL https Använder konstanten WP_PLUGIN_URL Hittar rätt sökväg även om wp-content har flyttats Stödjer Multisite genom att använda konstanten WPMU_PLUGIN_URL Christian Ohlsson 14
Viktiga saker att tänka på Aktivera plugin med: register_activation_hook( $file, $function ) Parametrar $file (string) (required) Sökvägen till pluginets primära PHP-fil $function (string) (required) Funktion att köra när pluggen aktiveras Läs mer: h"p://codex.wordpress.org/func*on_reference/register_ac*va*on_hook Christian Ohlsson 15
Exempel <?php register_activation_hook( FILE, mitt_plugin_install' ); function mitt_plugin_install () { if ( version_compare( get_bloginfo( 'version' ), 3.0', '<' ) ) { deactivate_plugins( plugin_basename( FILE ) ); // Deaktivera oss wp_die( Detta plugin kräver WordPress version 3.0 eller högre.' ); } }?> Christian Ohlsson 16
Viktiga saker att tänka på De-aktivera plugin med: register_deactivation_hook( $file, $function ) Parametrar $file (string) (required) Sökvägen till pluginets primära PHP-fil $function (string) (required) Funktion att köra när pluggen deaktiveras Läs mer: http://codex.wordpress.org/function_reference/register_deactivation_hook Christian Ohlsson 17
Exempel <?php register_deactivation_hook( FILE, mitt_plugin_deactivate' ); function mitt_plugin_deactivate () { }?> // Gör saker här för att återställa allt OBS! Deaktivera är inte att avinstallera! Anta att dina användare kommer att aktivera pluggen igen! Christian Ohlsson 18
Viktiga saker att tänka på Avinstallera plugin 1. Skapa en uninstall.php-fil i rootkatalogen för ditt plugin 2. Lägg all avinstallationskod i denna fil Detta är det rekommenderade sättet att avinstallera på, men man kan kan även använda: register_uninstall_hook() Christian Ohlsson 19
Exempel <?php if(!defined( 'WP_UNINSTALL_PLUGIN' ) ) exit (); // Delete option from options table delete_option( mitt_plugin_options' );?> Om inte WP_UNINSTALL_PLUGIN är definierad vet vi att WordPress inte anropade denna fil. Detta är en säkerhetsåtgärd I WordPress Christian Ohlsson 20
Vad är en hook? Med hook s kan pluginskaparen hook a på saker i WordPress utan att för den sakens skull ändra i kärnan Dvs Systemfilerna Det finns två typer av hooks: Actions Gör någonting Filters Transformera Christian Ohlsson 21
Hooks Action hooks Låter dig exekvera en funktion vid en specifik tidpunkt när WordPress laddas add_action( 'hook_name', 'your_function_name', [priority], [accepted_args] ); http://codex.wordpress.org/plugin_api/action_reference Christian Ohlsson 22
Exempel <?php add_action( 'user_register', mitt_plugin_welcome_email' ); function mitt_plugin_welcome_email ( $user_id ) { $user_info = get_userdata( $user_id ); //populate email values $email_to = is_email( $user_info->user_email ); $email_subject = 'Welcome!'; $email_msg = 'Thank you for registering on my website!'; //send welcome email wp_mail( $email_to, $email_subject, $email_msg ); }?> Christian Ohlsson 23
Några vanliga hooks plugins_loaded Inträffar då alla plugins laddats Init Inträffar när merparten laddats så att all info finns admin_menu Körs när adminmenyn finns template_redirect Körs före temats template valts wp_head Körs inuti <head> taggarna för användaren wp_footer Körs I temats footer admin_head Körs inuti <head> taggarna för admins admin_footer Körs I temats footer för admin user_register Körs när nytt användarkonto skapas save_post Körs när ny post/page skapas/uppdateras Christian Ohlsson 24
Filter Låter dig manipulera utdata av kod och content add_filter('hook_name', 'your_filter_function', [priority], [accepted_args]); http://codex.wordpress.org/plugin_api/filter_reference Christian Ohlsson 25
Kom ihåg Filter byter inte innehåll i databasen Bara i utdatan! <?php add_filter( 'the_content', mitt_plugin_filter_content' ); function mitt_plugin_filter_content ( $text ) { $text = str_replace( 'Drupal', 'WordPress', $text ); return $text; }?> Byter alla förekomster av Drupal mot WordPress I din content J Christian Ohlsson 26
Vanliga Filter hooks the_content Läggs på utskriften av page/post the_title Läggs på titeln body_class Läggs på <body> -taggen default_content Läggs på nya post/page comment_text Läggs på kommentarstexten Christian Ohlsson 27
Exempel <?php add_filter ( 'the_content', 'insertfootnote' ); function insertfootnote( $content ) { if(!is_feed() &&!is_home() ) { $content.= "<div class='subscribe'>"; $content.= "<h4>gillade du artikeln?</h4>"; $content.= "<p>prenumerera på <a href='http://ex.com/rss'>min RSS</a>!</p>"; $content.= "</div>"; } return $content; }?> Christian Ohlsson 28
Resultatet Christian Ohlsson 29
Antalet hooks i WP per version http://adambrown.info/p/wp_hooks Christian Ohlsson 30
Bygg plugins på en stadig grund! <?php /* Plugin Name: Mitt fina plugin Plugin URI: http://example.com/support/mitt-plugin/ Description: En plugin för att göra det här Version: 1.0 Author: Christian Ohlsson Author URI: http://example.com License: GPLv2 */ // DEFINE CONSTANTS define( MITTPLUGIN_VERSION', '1.0' ); define( 'MITTPLUGIN_TEXTDOMAIN', mittplugin_plugin' ); define( 'MITTPLUGIN_BASENAME', plugin_basename( FILE ) ); define( 'MITTPLUGIN_DIR', plugin_dir_path( FILE ) ); define( 'MITTPLUGIN_URL', plugins_url( mitt-plugin/' ) ); require_once(mittplugin_dir. 'includes/core.php' );?> Christian Ohlsson 31
Shortcodes <?php // Register a new shortcode: [lag] add_shortcode( lag', mitt_plugin_lag' ); // The callback function that will replace [lag] function mitt_plugin_lag () { return '<a href=http://www.hv71.se>hejja på rätt lag</a>'; }?> Christian Ohlsson 32
Resultatet Christian Ohlsson 33
Skapa egna menyer i DashBoard <?php add_action( 'admin_menu', mitt_plugin_create_menu' ); function mitt_plugin_create_menu () { //create custom top-level menu add_menu_page( Mina inställningar', Mitt Plugin', 'manage_options', mitt-plugin', 'mitt-plugin_settings_page' ); //create submenu items add_submenu_page( 'mitt-plugin', Om mitt plugin', Om', 'manage_options', 'mitt-plugin-plugin_about', 'mitt-plugin_about_page' ); add_submenu_page( 'mitt-plugin', Hjälp med Mitt Plugin', Hjälp', 'manage_options', 'mitt-plugin_help', 'mitt-plugin_page' ); add_submenu_page( 'mitt-plugin', 'Uninstall Mitt Plugin', 'Uninstall', 'manage_options', mitt-plugin_uninstall', 'mitt-plugin_uninstall_page' ); }?> Christian Ohlsson 34
Resultatet Christian Ohlsson 35
Parametrar: add_menu_page() $page_title Texten på titel-taggen $menu_title Namnet på menyn $capability Vad krävs för att se menyn $menu_slug Unikt namn på menyn $function Funktion som visar sidans innehåll $icon_url URL till en egen menyikon $position Position där menyn ska finnas Christian Ohlsson 36
Parametrar: add_submenu_page() $parent_slug Unikt namn på förälder-menyn $page_title Texten på titel-taggen $menu_title Namnet på undermenyn $capability Vad krävs för att se menyn $menu_slug Unikt namn på menyn $function Funktion som visar sidans innehåll Christian Ohlsson 37
Skapa egen meny under Settings Christian Ohlsson 38
Skapa egen meny under Settings add_action( 'admin_menu', 'crille_more_settings_create_menu' ); function crille_more_settings_create_menu() { //create Settings submenu page add_options_page('crille More Settings Page', 'Crille More Settings', 'manage_options', 'crille_more_settings', 'crille_more_settings_page' ); } function crille_more_settings_page() {?> <h1>crille More Settings Page</h1> <p>lots of options here to set :-)</p> <?php }?> Christian Ohlsson 39
Resultatet Christian Ohlsson 40
Widgets En Widget är en typ av plugin som är gjord för att existera i en sidebar och visa upp något Skapas för att på ett enkelt sätt ge drag n drop funktionalitet till WordPress Kan läggas till, tas bort och ändras i ordning från Appearance -> Widgets Kan placeras där en Sidebar registrerats i temat Christian Ohlsson 41
Registrera en Sidebar I temats functions.php register_sidebar( array ( 'name' => ( 'Sidebar Widget Area', my_theme' ), 'id' => 'primary-widget-area', 'before_widget' => '<li class="widget-container">', 'after_widget' => "</li>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); Christian Ohlsson 42
Header på en Widget Plugin name Unikt namn på din plugin Plugin URI Var finns info om pluginet Description Vad gör ditt plugin Version Öhhhh Gissa? Author Vem skrev det? Author URI Hur kan diu kontaktas License Regler för användning av ditt plugin. Normalt sett I WordPress är det GPLv2 Christian Ohlsson 43
Exempel /* * Plugin Name: Crille Widget Hello * Plugin URI: http://example.com/mina-wp-plugins/ * Description: Skriver ut lite text i en Widget * Version: 1.0 * Author: Christian Ohlsson * Author URI: http://example.com * License: GPLv2 */ Christian Ohlsson 44
Class Ett plugin skall finnas i en class class Crille_Widget_Hello extends WP_Widget { public function construct() { } function widget ($args, $instance) { } function update ($new_instance, $old_instance) { } function form () { } } Christian Ohlsson 45
Berätta att du finns För att WordPress skall kunna hantera din Widget måste den registreras add_action( 'widgets_init', function() { register_widget( 'Crille_Widget_Hello' ); } ); Christian Ohlsson 46
construct() Konstruktorn för din Widget. Initierar allt public function construct() { // widget actual processes parent::wp_widget(false,'crille Widget Hello', 'description=skriver ut en liten text i en Widget'); } Christian Ohlsson 47
widget ($args, $instance) Innehåller själva utskriften av din Widget function widget ($args, $instance) { // Hämta in alla argument extract ($args); echo $before_widget; echo $before_title. $instance['title']. $after_title; echo '<p class="crille-widget-hello >This is fun!</p>'; echo $after_widget; } Christian Ohlsson 48
update ($new_instance, $old_instance) Hanterar uppdatering av Widget function update ($new_instance, $old_instance) { return $new_instance; } Christian Ohlsson 49
form () Hur skall formuläret se ut i DashBoard function form () { $title = esc_attr ($instance['title']);?> <p> <label for="<?php echo $this->get_field_id('title');?>"> Title: <input class="widefat" id="<?php echo $this->get_field_id('title');?>" name="<?php echo $this->get_field_name('title');?>" type="text" value="<?php echo $title;?>" /></label> </p> <?php } Christian Ohlsson 50
Christian Ohlsson 51