View
5
Download
0
Category
Preview:
Citation preview
Att utveckla plugins
1 Christian Ohlsson
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
Christian Ohlsson 6
<?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 */ ?>
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!
Christian Ohlsson 9
update_option() // Dåligt funktionsnamn
mitt_plugin_update_option() //Bra funktionsnamn
$settings // Dåligt variabelnamn
$mitt_plugin_settings // Bra variabelnamn
Organisera och strukturera dina filer!
Christian Ohlsson 10
/unikt-namn-på-plugin
unikt-namn-på-plugin.php
uninstall.php
readme.txt
screenshot-1.png
/js
/css
/includes
/images
Håll ordning på sökvägar
§ Lokala sökvägar
Christian Ohlsson 11
<?php
// Visa lokal sökväg till min plugin-katalog
echo plugin_dir_path( __FILE__ );
?>
Visar: /public_html/wp-content/plugins/mitt-plugin/
Håll ordning på sökvägar
Christian Ohlsson 12
<?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
Håll ordning på sökvägar
§ URL sökvägar
Christian Ohlsson 13
<?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
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:
Christian Ohlsson 15
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
Exempel
Christian Ohlsson 16
<?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.' );
}
}
?>
Viktiga saker att tänka på
§ De-aktivera plugin med:
Christian Ohlsson 17
Parametrar $file (string) (required) – Sökvägen till pluginets primära PHP-fil $function (string) (required) – Funktion att köra när pluggen deaktiveras
register_deactivation_hook( $file, $function )
Läs mer: http://codex.wordpress.org/Function_Reference/register_deactivation_hook
Exempel
Christian Ohlsson 18
<?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!
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:
Christian Ohlsson 19
register_uninstall_hook()
Exempel
Christian Ohlsson 20
<?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
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
Christian Ohlsson 22
http://codex.wordpress.org/Plugin_API/Action_Reference
add_action( 'hook_name', 'your_function_name',
[priority], [accepted_args] );
Exempel
Christian Ohlsson 23
<?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 );
}
?>
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
Christian Ohlsson 25
add_filter('hook_name', 'your_filter_function',
[priority], [accepted_args]);
http://codex.wordpress.org/Plugin_API/Filter_Reference
Kom ihåg
§ Filter byter inte innehåll i databasen § Bara i utdatan!
Christian Ohlsson 26
<?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
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
Christian Ohlsson 28
<?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;
}
?>
Resultatet
Christian Ohlsson 29
Antalet hooks i WP per version
Christian Ohlsson 30
http://adambrown.info/p/wp_hooks
Bygg plugins på en stadig grund!
Christian Ohlsson 31
<?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' ); ?>
Shortcodes
Christian Ohlsson 32
<?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>';
} ?>
Resultatet
Christian Ohlsson 33
Skapa egna menyer i DashBoard
Christian Ohlsson 34
<?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' );
}
?>
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
Christian Ohlsson 39
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 } ?>
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
Christian Ohlsson 42
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>',
) );
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
Christian Ohlsson 44
/*
* 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
*/
Class
§ Ett plugin skall finnas i en class
Christian Ohlsson 45
class Crille_Widget_Hello extends WP_Widget {
public function __construct() {
}
function widget ($args, $instance) {
}
function update ($new_instance, $old_instance) {
}
function form () {
}
}
Berätta att du finns
§ För att WordPress skall kunna hantera din Widget måste den registreras
Christian Ohlsson 46
add_action( 'widgets_init',
function() {
register_widget( 'Crille_Widget_Hello' );
}
);
__construct()
§ Konstruktorn för din Widget. Initierar allt
Christian Ohlsson 47
public function __construct() {
// widget actual processes
parent::WP_Widget(false,'Crille Widget Hello',
'description=Skriver ut en liten text i en Widget');
}
widget ($args, $instance)
§ Innehåller själva utskriften av din Widget
Christian Ohlsson 48
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;
}
update ($new_instance, $old_instance)
§ Hanterar uppdatering av Widget
Christian Ohlsson 49
function update ($new_instance, $old_instance) {
return $new_instance;
}
form ()
§ Hur skall formuläret se ut i DashBoard
Christian Ohlsson 50
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 51
Recommended