Hier eine kleine Walker Klasse für WordPress um sich ein Menü in der Form ” Link1 | Link2 | Link3 ” zu erstellen.
Einfach die Klasse in die functions.php des Themes und den Menü Eintrag dort im Template platzieren wo er hin soll.
|
|
Zwei der Funktionen/Methoden die man in zufunkt wohl in allen meinen Plugins finden wird sind:
Voraussetzung ist PHP 5.1.2 für die Autoload Funktion.
1. Zum ermitteln von Plugin Daten, damit nicht immer alles per Constante definiert wird um Namensraum freizuhalten:
public static function get_plugin_data($get_data=false) {
$plugin_data=wp_cache_get('plugin_data','pluginname');
if ($plugin_data === false || empty($plugin_data['Version'])) {
$plugin_data = get_file_data( __FILE__, array(
'Name' => 'Plugin Name',
'PluginURI' => 'Plugin URI',
'Version' => 'Version',
'Description' => 'Description',
'Author' => 'Author',
'AuthorURI' => 'Author URI',
'TextDomain' => 'Text Domain',
'DomainPath' => 'Domain Path'
), 'plugin' );
$plugin_data['BaseName']=plugin_basename(__FILE__);
$plugin_data['Folder']=dirname( plugin_basename( __FILE__ ) );
$plugin_data['URL']=plugins_url( '', __FILE__ );
if (defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG)
$plugin_data['JSVersion']=time();
else
$plugin_data['JSVersion']=$plugin_data['Version'];
wp_cache_add('plugin_data',$plugin_data,'pluginname');
}
if (!$get_data)
return $plugin_data;
return $plugin_data[$get_data];
}
2. Die Autoload Funktion von PHP zum automatischen laden von Klassen damit sie nur dann geladen werden wenn Sie auch benötigt werden. Das heißt verwend man ein “add_action” wird die classe erst geladen wenn wirklich ein “do_action” erfolgt oder die Seiten klasse für einen Menü Eintrag erst geladen wird wenn der Menüpunkt tatsächlich aufgerufen wird. Voraussetzung ist das man das ganze Plugin Klassen basierend aufbaut. Das kann dann nicht nur Ressourcen Sparen.
public function __construct() {
//register autoloader
spl_autoload_register( array( $this, 'autoloader' ) );
}
public static function autoloader( $class_name ) {
//WordPress classes loader
$wpclass='/class-'.strtolower(str_replace('_','-',$class_name)).'.php';
if ( is_file(ABSPATH .'wp-admin'.DIRECTORY_SEPARATOR.'includes'.$wpclass) ) {
require(ABSPATH .'wp-admin'.DIRECTORY_SEPARATOR.'includes'.$wpclass);
return true;
}
if ( is_file(ABSPATH . WPINC . $wpclass) ) {
require(ABSPATH . WPINC . $wpclass);
return true;
}
//Plugin classes to load
if ( strpos( $class_name,'PluginClass_') !== false ) {
$class_load = dirname( __FILE__ ) . DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'class-' . strtolower( str_replace( array( 'PluginClass_', '_' ), array( '', '-' ), $class_name ) ) . '.php';
if ( is_file( $class_load ) ) {
require($class_load);
return true;
}
}
return false;
}
Diese sollten sich innerhalb der Haupt Plugin Datei in einer Klasse befinden.
Ich muss in meinem Plugin für WordPress den ABSPATH übergeben um eine eigene Ajax Behandlung zu haben.
Was meint ihr ist der Code schnipsel dafür geeignet um es möglicht sicher gegen Angriffe zu machen ?
if ( is_file( dirname(dirname(dirname(dirname( __FILE__ )))).'/wp-load.php' ) ) {
require_once(dirname(dirname(dirname(dirname( __FILE__ )))).'/wp-load.php');
} else {
$abspath = filter_input( INPUT_POST, 'ABSPATH', FILTER_SANITIZE_URL );
$abspath = rtrim(realpath($abspath), '/\\' );
if ( ! empty($abspath) && is_dir( $abspath . '/' ) && is_file( realpath( $abspath . '/wp-load.php' ) ) ) {
require_once($abspath . '/wp-load.php');
} else {
die();
}
}
Erläuterung:
Wenn der Plugins Ordner im Standard Verzeichnis ist oder zumindest in der selben Verzeichnis Tiefe muss die Übergabe nicht genutzt werden.
Sonst.
Das übergebene Verzeichnis vorfiltern (nur in URLs erlaubte Zeichen werden zugelassen)
mit ‘realpath()’ alle ‘../’,’./’ entfernen und prüfen ob das Verzeichnis existiert.
da ‘realpath()’ auch das aktuelle Verzeichnis ausgibt nochmal Verzeichnis und Datei auf Existenz prüfen.
WP-load.php laden.
Bei meiner arbeit am Plugin BackWPup habe ich nach einer Möglichkeit gesucht Ressourcen zu sparen bei Ajax Calls und bei der Auftrags Ausführung. Die einzeige große Einsparung die ich bisher gefunden habe ist es die Übersetzungen anderer Plugins nicht mit zu laden das die enorm viel Speicher verbrauchen. Dies bringt in meiner test Installation mit 20 Plugins eine Einsparung von 31 MB auf 25,5 MB Script speicher. Da die Dateien auch nicht geöffnet werden wird das auch noch eine Einsparung bringen die ich im Moment nicht beziffern kann.
Hier die Umsetzung:
Wichtig ist hierbei das ich nur die Übersetzungen nicht lade wenn es sich um Calls meines Plugins handelt.
define('PLUGIN_MENU_PAGES', 'page1,page2');
if (defined('DOING_AJAX') and DOING_AJAX and in_array($_POST['backwpupajaxpage'],explode(',',PLUGIN_MENU_PAGES)))
add_filter('override_load_textdomain', create_function('$default, $domain, $mofile','if ($domain=="textdomain") return $default; else return true;'),1,3);
Zusätzlich musste ich noch einbauen das mein Plugin als erstes geladen wird:
define('PLGUNINNAME_PLUGIN_BASENAME',plugin_basename(__FILE__));
public function pluginname_first_plugin($newvalue, $oldvalue) {
if (!is_array($newvalue))
return $newvalue;
for ($i=0; $i
unset($newvalue[$i]);
}
array_unshift($newvalue,PLGUNINNAME_PLUGIN_BASENAME);
return $newvalue;
}
add_filter('pre_update_option_active_plugins', 'pluginname_first_plugin',1,2);
Vielleicht kennt ja noch jemand eine Lösung die Ressourcen weiter zu optimieren und die WordPress eigene Ajax Behandlung zu nutzen…
Update:
mit einer etwas geänderten Funktion ist es nicht mehr notwendig das Plugin nach vorne zu schieben ![]()
define('PLUGIN_MENU_PAGES', 'page1,page2');
function overide_textdomain($default, $domain, $mofile) {
if ( (defined( 'DOING_CRON' ) && DOING_CRON) && in_array($_POST['backwpupajaxpage'],explode(',',PLUGIN_MENU_PAGES))) {
global $l10n;
if ($domain=='owntextdomainname') {
foreach (array_keys($l10n) as $domainkey)
unset($l10n[$domainkey]);
} else {
return true;
}
}
return $default;
}
add_filter('override_load_textdomain','overide_textdomain');
Update: Ich glaub das best ist es wenn in WordPress der WP-Performance-Gettext-Patch integriert wird. Nach meinen Tests bring das am meisten. Der Speicher verbrauch geht dann auf ca 17MB runter.
Da mir die Falttr Buttens in dem Bugis Theme fehlten hab ich mir ein Child Theme gemacht und sie selber integriert.
Hier der Code damit Ihr nicht alles nochmal machen müsst:
in der functions.php
< ?php
/**
* Register and call Flattr Library and button Script
*/
function bugis_flatter_init() {
if ( !is_admin() ) {
wp_register_script('flattr', 'http://api.flattr.com/js/0.6/load.js?mode=auto', false, '0.6', true);
wp_enqueue_script('flattr');
}
}
add_action( 'init', 'bugis_flatter_init' );
?>
In der sharebtn.php
Nicht vergessen bei data-flattr-uid=”danielhuesken” die eigene user ID einzutragen.
Es ist soweit BackWPup hat ein neues zuhause bekommen unter http://backwpup.com!
Ab sofort werde ich alles was damit zu tun hat nur noch dort bereitstellen.
Support wird es auch nur noch dort geben!
Diese frage tauchte Heute in einem Kommentar eines Blog Beitrages über BackWPup von David Decker auf.
Also es wahr vor ca. etwas über einem Jahr da wahr ich auf der suche nach eine Backup Lösung für meinen Blog.
Diese sollte volgendes können:
Außerdem wollte ich ab und zu ganz gerne mal ein automatisches Optimize der Datenbank durchführen.
Es ist endlich soweit ich habe die 2.0 Version von BackWPup soweit fertig.
Neuerungen sind:
Herunterladen könnt Ihr euch die Version bei WordPress.org, es ist die Development Version.
Auf Resonanz von Testern würde ich mich sehr freuen um die letzten Probleme vor dem Release mit WordPress 3.2 beseitigen zu können.
Ein Herzlich Dankeschön geht schon mal an David Decker der die deutsche Übersetzung gemacht hat und auch ein paar Beta Tests.
Ich habe ein neues Plugin für WordPress geschrieben mit dem mann die Datenbank und die Dateien von WordPress sichern kann das Plugin heißt “BackWPup” und steht ab sofort in der Version 0.5.0 zur Verfügung. Ich habe das Plugin ins leben gerufen weil ich auf der WordPress Homepage nur ein Plugin gefunden habe was dieses unterstützt. Dieses Plugin wird aber zur Zeit nicht mehr weiter entwickelt. Ich habe auߟderdem meinem Plugin eine Funktion zur automatischen Optimierung der Datenbank hinzugefügt damit ich hierfür kein zusätzliches mehr brauche. Mein Plugin nutzt das in WordPress enthaltene PCLzip zum komprimieren der Sicherung.
Wer will kann das Plugin gerne mal Downloaden und testen. Die aktuelle Version ist zwar noch in der Entwicklung aber soweit ich testen konnte läuft es jetzt schon sehr gut.
Für Anregungen und Verbesserungen bin ich gerne zu haben.
So ich habe meinen Blog jetzt auch erfolgreich auf WordPress 2.7 umgestellt und kann noch keine Probleme festellen als nächstes muss ich noch das K2 Theme wieder aktualisiren.