Wordpress Plugins - Einblicke in eine Geheimwissenschaft

Post on 08-May-2015

789 views 0 download

Transcript of Wordpress Plugins - Einblicke in eine Geheimwissenschaft

Plugins für Einsteiger

Einblicke in eine Geheimwissenschaft

Wozu überhaupt ein Plugin schreiben

• Erweiterung oder Veränderung der Kernfunktionalität von WordPress

• Erspart Kopfschmerzen bei Versionsupgrades• Lässt sich an andere Nutzer einfach

weitergeben

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Beispiel: Clever Adsense

• In aktuellen Posts soll Werbung möglichst dezent ausfallen

• Ältere Blogposts dürfen aggressivere Werbung beinhalten

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Voraussetzungen

• Ohne PHP geht‘s nicht• Aber: Plugins sind auch keine

Raketentechnologie

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Der Codex

• Der Codex enthält Antworten auf (fast) alle Fragen

• http://codex.wordpress.org/

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Anatomie eines Plugins

• Eine oder mehrere PHP-Dateien in WP-Content/plugins

• Kommentarbereich mit Metadaten über das Plugin

• Lizenzhinweise• Eventuell benötigte Grafiken oder Stylesheets

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Metadaten

<?php

/*

Plugin Name: Clever Ads

Description: Steuert die Platzierung von Werbemitteln

Author: Thomas Frütel

Author URI: http://fruetel.de

*/

?>

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Metadaten

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Lizenz<?php

/* Copyright YEAR PLUGIN_AUTHOR_NAME (email : PLUGIN AUTHOR EMAIL)

This program is free software; you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation; either version 2 of the License, or

(at your option) any later version.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software

Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

*/

?>

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Adsense Funktionen

function getAdsenseBanner()

{

return '<script type="text/javascript"><!--

google_ad_client = "pub-xxxxxxxx";

google_ad_slot = "yyyyyyyy";

google_ad_width = 468;

google_ad_height = 60;

//-->

</script>

<script type="text/javascript"

src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

</script>';

}

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Adsense Funktionen

function getAdsenseLargeRectangle()

{

return '<script type="text/javascript"><!--

google_ad_client = "pub-xxxxxxxx";

google_ad_slot = "yyyyyyyy";

google_ad_width = 336;

google_ad_height = 280;

//-->

</script>

<script type="text/javascript"

src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

</script>';

}

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Alter des Posts ermitteln

function isOldPost()

{

global $wp_query;

$currentPost = $wp_query->post;

$post_date = mysql2date('U',$currentPost->post_date);

$current_date = time();

$offset = 24*3600*60;

return (($post_date + $offset) < $current_date);

}

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Hooks

• Hooks verbinden ein Plugin mit den WordPress Kernfunktionalitäten

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Filter Hooks

• Verändern Daten vor der Übermittlung an Browser oder Datenbank

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Action Hooks

• Werden durch bestimmte Ereignisse in WordPress ausgelöst

• Zum Beispiel Veröffentlichung eines Posts, Abgabe eines Kommentars

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Verankern des Clever Adsense Plugins

function showAds($content){

if (is_single()){

if (isOldPost()) {return getAdsenseLargeRectangle().$content;

} else {return $content.getAdsenseBanner();

}} else {

return $content;}

}

//Filter Hookadd_filter ('the_content', 'showAds');

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Konfigurierbarkeit

• Viele Plugins lassen sich im WordPress Adminbereich konfigurieren

• Das können wir auch!

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Action Hook für das Backendfunction showAdsAdmin(){ /** * @params $page_title, $menu_title,$capability, * @params $menu_slug, $function */ add_options_page('Clever Ads', 'Clever Ads', 10,

'clever_ad_options', 'cleverOptions');}

function cleverOptions(){}

add_action('admin_menu', 'showAdsAdmin');

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Menüeintrag im Dashboard

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Die CleverOptions Funktion

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Das Optionsformular

function cleverOptions()

{

?>

<div class="wrap">

<h2>Clever Ads</h2>

<form method="post" action="">

Post ist alt ab <input name="old_age" value="<?php echo get_option("ca_old_age") ?>" /> Tagen<br />

Adsense Ad Client: <input name="adclient" value="<?php echo get_option("ca_adclient")?>" /><br />

Adsense Adslot: <input name="adslot" value="<?php echo get_option("ca_adslot")?>" /><br />

<input type="hidden" name="action" value="update_options" />

<input type="submit" name="Submit" value="<?php _e('Save Changes') ?>" />

</form>

</div>

<?php

}

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Das Optionsformular

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Optionen speichern

function cleverOptions()

{

if ($_POST['action'] == 'update_options') {

update_option("ca_old_age", $_POST['old_age']);

update_option("ca_adclient", $_POST['adclient']);

update_option("ca_adslot", $_POST['adslot']);

}

?>

<div class="wrap">

<h2>Clever Ads</h2>

<form method="post" action="">

Post ist alt ab <input name="old_age" value="<?php echo get_option("ca_old_age") ?>" /> Tagen<br />

Adsense Ad Client: <input name="adclient" value="<?php echo get_option("ca_adclient")?>" /><br />

Adsense Adslot: <input name="adslot" value="<?php echo get_option("ca_adslot")?>" /><br />

<input type="hidden" name="action" value="update_options" />

<input type="submit" name="Submit" value="<?php _e('Save Changes') ?>" />

</form>

</div>

<?php

}

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Optionen auslesenfunction isOldPost()

{

global $wp_query;

$currentPost = $wp_query->post;

$post_date = mysql2date('U',$currentPost->post_date);

$current_date = time();

$offset = 24*3600*get_option('ca_old_age');

return (($post_date + $offset) < $current_date);

}

function getAdsenseLargeRectangle()

{

return '<script type="text/javascript"><!--

google_ad_client = "'.get_option('ca_adclient').'";

google_ad_slot = "'.get_option('ca_adslot').'";

google_ad_width = 336;

google_ad_height = 280;

//-->

</script>

<script type="text/javascript"

src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

</script>';

}

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Standardwerte setzenfunction initializeCleverOptions()

{

add_option("ca_old_age", 60);

add_option("ca_adclient", "xxxxx-xxxxx");

add_option("ca_adslot", "yyyyy-yyyyy");

}

register_activation_hook(__FILE__, "initializeCleverOptions");

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel

Ausblick

• Absichern des Backend-Formulars mit einem Nonce• Erkennen von Besuchern, die über Google kommen• Erkennen von Stammlesern über ein Cookie• Identifizieren von Google Suchbegriffen• Geotargeting• Aufräumen der Optionen bei Deinstallation• Plugin bei WordPress.org veröffentlichen

Thomas Frütel http://blog.webmaster-homepage.de/

http://twitter.com/Fruetel