Att utveckla plugins. Christian Ohlsson

Relevanta dokument
DT069G - Multimedia för webben - VT16_P4

WordPress Multisite. Christian Ohlsson

Content Management System. Publiceringssystem

Content Management System. Publiceringssystem

Introduktion Till WordPress

WordPress som ett CMS. Christian Ohlsson 1

Anvä ndärguide Nyä Expeditionsresor

Om inte denna rekommendation efterföljs kan vi tyvärr inte ge några garantier för att vi kan supportera de problem som då kan uppstå.

Services + REST och OAuth

Karlstads Universitet, Datavetenskap 1

Tomas Axelsson

BRÖDGRUPPENS HEMSIDA

INSTALLATION...3 ATT KOMMA IGÅNG...3 PROGRAMMETS DESIGN...4 LÄGGA TILL TABELL...4 EDITERA TABELL...4 EDITERA RELATION...5 SPARA OCH AVSLUTA...

Aktivering av SSL (https).

Om inte denna rekommendation efterföljs kan vi tyvärr inte ge några garantier för att vi kan supportera de problem som då kan uppstå.

Installera din WordPress med 9 enkla steg

INTRODUKTION TILL ANGULAR JS

1. Logga in som Wordpress-administratör till den sajen som ni vill säkerhetskopiera.

JAVASCRIPT. Beteende

Webbprogrammering. Sahand Sadjadee

Hur man använder modulen Extended Calendar

CMS, optimerade för programmerare Eller hur kan ett sådan skapas.

Laboration 3 i kursen Produktion för tryckta medier och webb: Webbplatsproduktion med ett publiceringssystem

Sync Master startas via Task Scedule (schemaläggaren). Programmet kan köras på servern utan att någon är inloggad på servern.

Skapa en webbplats med WordPress

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

För att öppna galleriet, ange adressen

Lathund ringstromsskog.se

ASP.NET MVC. Copyright Mahmud Al Hakim Innehåll

Innehållsförteckning Introduktion Installation, konfiguration & Matchning Installation på primära domänkontrollanten...

PM Dokumentation

Sync Master startas via Task Scedule (schemaläggaren). Programmet kan köras på servern utan att någon är inloggad på servern.

Beijer Electronics AB 2000, MA00336A,

1. Logga in som Wordpress-administratör till den siten som ni will kopiera och flytta någon annan stans.

JAVASCRIPT-POWERED LOADRUNNER CHRISTIAN GERDES PERFORMANCE ENGINEER LIGHTS IN LINE AB

Översättning av galleriet. Hjälp till den som vill...

Windows Forms Winstrand Development

Optimering av Wordpress

Aktivering av SSL (https).

Konfigurera Wordpress som Hemsida istället för blogg

Plugin-hantering i ett webbsideramverk

Labora&on 7 Syfte med laborationen:

RUTINBESKRIVNING FÖR INSTALLATION AV KAMERA

E13 Behind the Wild. Dagens agenda. Cookies Context/ändra context Augmentation (förstärkning) Klassiskt arv Att låna metoder Namespaces Postludium

WordPress fortsättning Anpassa teman, bildgalleri, fleranvändare, webshop, CSS mm

Komma igång med Adobe Presenter ver.7

Manual

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Ontech Control för Android Användarmanual Svenska

E13 "Behind the Wild"

Det finns många flaggor till g++,

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

CMS. - Content management system

Appar med ryggrad. Introduktion till JavaScriptramverket Backbone

LUPstudentpapers. Manual Reviewer

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

Installation av F13 Bråvalla

Del 1: Skapa konto i Exchange

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Vyer, Prepared Statements, Triggers

Introduktion HTML och PHP 732G16 Databaser design och programmering

Referenshanteringsprogrammet

Snabbguide för publicering i Drupal för ki.se

1 Översikt Vad är kontokoder? Konto/Mapp uppbyggnad Tillgång till Kontokoder Område Kontokoder...5

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Din egen WordPress-blogg - Nybörjarguide

Riktiga Vykort Partner App Teknisk beskrivning

Nya webbservern Dvwebb.mah.se

DOTNETNUKE SKOLNING Skapat: den 20 november 2012

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

PRINTER DRIVER ADMINISTRATOR GUIDE

Installationsanvisningar VISI Klient

Lektion 5 HTML, CSS, PHP och MySQL

TDP013 Node.js, JSCoverage, Mocha. Marcus Bendtsen Institutionen för Datavetenskap

Metoder (funktioner) Murach s: kap Winstrand Development

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

nollning.nu - en liten handbok

Administrationsmanual ImageBank 2

FactoryCast HMI. Premium & Quantum PLC. Applets

Ontech Control för Iphone Användarmanual Svenska

Versionshantering med Git

Webbplats analys webstatinfo.com

Introduktion till användning av linux-servern sledge och några övningsuppgifter

Labora&on 8 Formulär övningar/uppgi6er

LVDB i GEOSECMA. Innehåll. Inledning. Produkt: GEOSECMA Modul: LVDB Skapad för Version: Uppdaterad:

Lathund till PsycINFO (OVID)

En grundkurs i hemsidor och hur de är uppbyggda

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

surell consulting ab

Installationsanvisningar VisiWeb. Ansvarig: Visi Closetalk AB Version: 2.3 Datum: Mottagare: Visi Web kund

WordPress-teman. terminologi och uppbyggnad. Christa Hannuksela. Examensarbete. Informations- och mediteknik

Tomas Axelsson

Tentamen i Introduktion till programmering

Bruksanvisning för VeraPlus

Manuell installation av SQL Server 2008 R2 Express SP2 fo r SSF Timing

Installera widgetshop på Facebook

Allt du behöver för crowdsourcing

IRONCAD KONFIGURATIONER

E12 "Evil is going on"

Transkript:

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