Sidebar
ein-/ausblenden

WP - Tutorial, wir schreiben ein WordPress Plugin - Teil 2

Plugin für WordPress SEO

Anzeige

Im ersten Teil haben wie erreicht, dass unser Plugin eine Funktion enthält, mit der wir innerhalb von „the loop“ ein bestimmtes Feld aus den „Benutzerdefinierte Feldern“ auslesen können.
Nun möchte ich ein wenig mehr darauf eingehen, wie man Abfragen in den Adminbereich von WordPress bringt. Ich denke, dass dies doch des öfteren benötigt wird und somit muss der Teil 3 dieser Serie sich mit dem Ausführen der Funktion außerhalb von „the loop“ beschäftigen.
Ich hoffe, dass mir die jenigen verzeihen, die darauf gewartet haben - Teil 3 kommt bestimmt.

Optionsseite erstellen

Bringen wir nun eine neue Seite in unseren Adminbereich, in dem Fall bringen wir die Seite in den Punkt „Optionen“. Dazu ist nicht viel Code notwendig. Die nötigen Mittel dazu bekommen wir von WP, das durch seine Pluginfunktion sehr gute Mittel dafür mitbringt.


function fb_meta_description_option_page() {
} // Ende Funktion fb_meta_description_option_page()

// Adminmenu Optionen erweitern
function fb_meta_description_add_menu() {
	add_options_page('WP Tutorial-Plugin', 'WP Tutorial', 9, __FILE__, 'fb_meta_description_option_page'); //optionenseite hinzufügen
}

// Registrieren der WordPress-Hooks
add_action('admin_menu', 'fb_meta_description_add_menu');
?>

Mehr Erläuterungen zu den Hooks findet ihr im Artikel „WP - Hinweise für das Schreiben eines WordPress-Plugins“ und im Teil 0 dieses Tutorials.

Wenn ihr nun wieder in euer WP-System geht und das Plugin ist hoffentlich noch aktiv, dann schaut mal unter dem Punkt „Optionen“. Dort sollte es nun den Punkt „WP Tutorial“ geben. Anklicken - sollte ohne Fehler passieren und eine leere Seite zeigen
Das nützt uns natürlich nicht sonderlich viel. Versuchen wir nun unseren Bereich auszubauen und in diesem Feld den Namen für unsere Funktion zu übergeben. Damit könnten wir uns das direkte Ändern der Funktion im Code ersparen, denn jetzt muss man ja das Feld, z.B. „description“ immer direkt in der Funktion ändern und das ist nicht sonderlich komfortabel.

Optionsseite mit Inhalt erstellen

Den obigen Code bauen wir nun aus. Auf der Seite haben wir eine Kontainer mit der CSS-class „wrap“, diese wird vom Adminbereich genutzt. Weiterhin haben wir ein Formular, welches die Daten dann aktualisiert. Um diese Daten zu aktualisieren, gibt es im WordPress den hook „add_option“, damit können wir ein Feld in die Datenbank der Tabelle TABLEPRÄFIX_options schreiben. In unserem Beispiel fügen wir das Feld f„b_meta_field“ hinzu und füllen es mit dem Wert „description“.


function fb_meta_description_option_page() {
?>

<!-- Start Optionen im Adminbereich (xhtml, auÃerhalb php) -->
	<div class="wrap">
	  <h2>WP Tutorial Optionen</h2>
	  <form name="form1" method="post" action="<?=$location ?>">
	  	<input name="fb_meta_field" value="<?=get_option("fb_meta_field");?/>" type="text" />
	  	<input type="submit" value="Speichern" />
	  	<input name="action" value="insert" type="hidden" />
	  </form>
	</div>

<?php
} // Ende Funktion fb_meta_description_option_page()

// Adminmenu Optionen erweitern
function fb_meta_description_add_menu() {
	add_option("fb_meta_field","description"); // optionsfield in Tabelle TABLEPRÄFIX_options
	add_options_page('WP Tutorial-Plugin', 'WP Tutorial', 9, __FILE__, 'fb_meta_description_option_page'); //optionenseite hinzufügen
}

// Registrieren der WordPress-Hooks
add_action('admin_menu', 'fb_meta_description_add_menu');
?>

Nun haben wir die Seite zwar in WP und wir können auch Daten eingeben, die Daten werden aber noch nicht an die Datenbank übermittelt. Dazu benötigen wir noch die Abfrage des Formulars, was soll also passieren, wenn der Button „Speichern“ geklickt wird. Dazu folgende Zeilen hinzufügen.


$fb_meta_field = get_option('fb_meta_field');

if ('insert' == $HTTP_POST_VARS['action']) {
	update_option("fb_meta_field",$HTTP_POST_VARS['fb_meta_field']);
}

Wenn wir nun in das Feld einen Wert eintragen, dann wird dieser auch in der Datenbank abgelegt.
DB

Wenn ihr aber nun euren Beitrag mit der Funktion (aus Teil 1) anseht, dann werdet ihr sicher merken, dass sich nichts ändert, obwohl ihr im Adminbereich den Feldnamen ändert - nun das ist normal, denn wir haben das Feld nicht in unsere Abfrage eingebunden. Das machen wir nun noch.

if ( $key == $fb_meta_field ) {

Insgesamt sieht der Code bei mir nun so aus. Achtung, die Werte im Feld müssen natürlich dem entsprechen, die es auch als benutzerdefiniertes Feld gibt.
Optionen


<?php
/*
Plugin Name: Meta Description
Plugin URI: http://bueltge.de/
Description: Benutzerdefiniertes Feld Description auslesen
Version: 1.2
Author: Frank Bueltge
Author URI: http://bueltge.de/
Update Server: http://bueltge.de/wp-content/download/wp/
Min WP Version: 1.5
Max WP Version: 2.0.4
*/

$fb_meta_field = get_option('fb_meta_field');

if ('insert' == $HTTP_POST_VARS['action'])
{
    update_option("fb_meta_field",$HTTP_POST_VARS['fb_meta_field']);
}

// Innerhalb von the_loop reicht das
function fb_meta_description() {
  global $id, $post_meta_cache, $fb_meta_field; // globale Variablen

  if ( $keys = get_post_custom_keys() ) {
    foreach ( $keys as $key ) {
      $values = array_map('trim', get_post_custom_values($key));
      $value = implode($values,', ');
      if ( $key == $fb_meta_field ) {
        echo "$value";
      }
    }
  }
} // Ende Funktion fb_meta_description()

function fb_meta_description_option_page() {
?>

<!-- Start Optionen im Adminbereich (xhtml) -->
  <div class="wrap">
    <h2>WP Tutorial Optionen</h2>
    <form name="form1" method="post" action="<?=$location ?>">
      <input name="fb_meta_field" value="<?=get_option("fb_meta_field");?/>" type="text" />
      <input type="submit" value="Speichern" />
      <input name="action" value="insert" type="hidden" />
    </form>
  </div>

<?php
} // Ende Funktion fb_meta_description_option_page()

// Adminmenu Optionen erweitern
function fb_meta_description_add_menu() {
  add_option("fb_meta_field","description"); // optionsfield in Tabelle TABLEPRÄFIX_options
  add_options_page('WP Tutorial-Plugin', 'WP Tutorial', 9, __FILE__, 'fb_meta_description_option_page'); //optionenseite hinzufügen
}

// Registrieren der WordPress-Hooks
add_action('admin_menu', 'fb_meta_description_add_menu');
?>

Download:

Ist die Arbeit nicht 1 Euro wert?

Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software. Möchtest du mehr oder anders spenden, so besuche meine Wunschliste.

Download als php-Datei

Download als phps-Datei: fb_meta_description_2.phps - 680 byte

8 Kommentare und 4 Trackbacks zu „WP - Tutorial, wir schreiben ein WordPress Plugin - Teil 2“

  1. 1
    Pingback von WP - Tutorial, wir schreiben ein WordPress Plugin - Teil 1 - bueltge.de [by:ltge.de]
  2. 2
    Trackback von DerZeiger.de
  3. 3
    Kommentar von Nicolas Limmeroth

    Hallo,

    ich habe auf die schnelle probiert mich in die Plugins einzuarbeiten, um herauszufinden in welchen Passagen die Rechte im Admin-Bereich (für Role-Manager) deklariert werden. Leider erfolglos.

    Bei den meisten Plug-Ins läuft die Zusammenarbeit mit Role-Manager wunderbar. Doch bei Einem möchte ich dies nachträglich auch optimieren, damit auch Laien ihr (leichteres) Backend bedienen können.

    Ist dies schwierig?
    Wäre für jede Hilfe/ Link/ Tipp sehr dankbar.

    Grüße, Nicolas

  4. 4
    Kommentar von Frank Bültge

    Dazu steht natürlich auch eine Funktion zur Verfügung: current_user_can, Erläuterung in einem Beitrag "WP - Plugin Tipp - Userlevel abfragen" von mir und ein aktueller Linktipp

  5. 5
    Pingback von Matthias Pospiech » Blog Archive » Development of a Plugin for Wordpress
  6. 6
    Pingback von René-Ade.de (René Ade) » Erstellen eines eigenen WordPress Plugins
  7. 7
    Kommentar von Chukki

    Wunderbare Tutorials! Bin echt begeistert... habe bisher immer alle Funktionen ausgelagert, aber ist ja echt einfach das ganze ins WP-Backend zu integrieren.

    Gruß Chukki

  8. 8
    Kommentar von marco

    hallo, ich schon wieder...will ja nicht nerven :-)
    habe dein tutorial einmal durchgemacht, um aus dem backend variablen zu setzen.
    funktioniert auch soweit. das form wird richtig dargestellt.

    aber: er frisst die variable =$location nicht.

    lasse ich das "=" weg, wird die seite angezeit ohne inhalt unter "action".

    wie muss die variable heissen das er sie richtig herholt? oder kann ich z.b. auch fix "options.php" eintragen?!

    kann ich die geschriebene variable auch aus dem template wieder herholen?

    danke

  9. 9
    Kommentar von marco

    fehler gefunden!
    die variable nimmt er aber $HTTP_POST_VARS muss $_POST sein...
    dann übernimmt er endlich den neuen eingabewert!

    wozu is jetzt die
    function fb_meta_description()
    { ...}
    da?! wenn ich die befehle darin auskommentiere, geht es ja trotzdem.
    und sie wird ja nirgens aufgerufen...

  10. 10
    Kommentar von Matthias Pospiech

    Ich habe ein Plugin, das aus den Daten aus der form eine neue Webseite präsentiert.
    Wenn ich diese Ausgebe, dann wird die allerdings nicht im admin Bereich, sondern komplett oberhalb ausgegeben (noch vor html und head!).

    Kannst du ein Beispiel geben, wie man mit forms nicht nur Variablen setzt, sondern auch eine webseite / html Code danach ausgibt?

  11. 11
    Kommentar von Frank Bültge

    @Matthias: Dazu muss man anders vorgehen, du musst im Content etwas ersetzen. Dazu muss auf den Inhalt zugegriffen werden. So kann man zum Beispiel einen Schlüssel oder Shortcode im Content absetzen, der dann den Inhalt von deinem Form setzt.

  12. 12
    Kommentar von Matthias Pospiech

    Ich habe es jetzt gelöst, aber denke nicht, dass es eine saubere Lösung ist. Imwesentlichen prüfen ich in einer "pluginname_main()" auf alle POST Variablen, und führe den eigentlichen main code nur aus, wenn keine davon zutraf.

Überlastung, Kommentare sind vorübergehend geschlossen

Ich bin urlaubsreif, ersticke in Arbeit und damit auch für die Leser des Weblogs nicht zu erreichen. Bitte geduldet euch ein wenig mit Supportanfragen.
Leider muss ich die Kommentarfunktion deaktivieren, ansonsten würde ich weiter in Arbeit ersticken oder die Anfragen nicht nach bestem Gewissen beantworten.

Vielen Dank für das Verständnis!