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

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 Felder“n 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.

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 11 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

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 fb_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="<?php echo 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', esc_html( $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: https://bueltge.de/
Description: Benutzerdefiniertes Feld Description auslesen
Version: 1.2
Author: Frank Bueltge
Author URI: https://bueltge.de/
*/

$fb_meta_field = get_option('fb_meta_field');

if ('insert' == $HTTP_POST_VARS['action']) {
    update_option( 'fb_meta_field', esc_html( $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 phps-Datei: fb_meta_description_2.phps - 680 byte

22 Kommentare

  1. Pingback: DerZeiger.de
  2. 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

Kommentare sind geschlossen.