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
Top Related