Sidebar
ein-/ausblenden

WP - Der „Rahmen“ für ein Widget Plugin

Plugin für WordPress SEO

Anzeige

Ein Plugin unternahm den Versuch, dem Anwender von WordPress das erstellen seines Layouts zu vereinfachen.
Kenntnisse in html, geschweige denn php sind dafür nicht notwendig. Mittlerweile hat sich das Plugin durchgesetzt und viele Anwender nutzen diese Art der Templatekonfiguration. Auch ich war davon betroffen, denn eine Anfrage nach einem kleinen Plugin, welches bisher nicht als Widget-Plugin zur Verfügung stand, sorgte dafür, dass ich mich ein wenig mehr mit dem „Rahmen“, der für ein Widget notwendig ist, auseinander setzte. Sinnvoll oder nicht, das muss jeder selbst wissen.

Wer allerdings ein Plugin schreiben möchte, der muss sich an gewisse Regeln halten. Mehr Information dazu gibt es auf der dazugehörigen Site - WordPress Widgets.

Um zusätzliche Funktionen einzubinden, oder bereits bestehende Plugins für das Widget-Plugin zu erweitern steht nun hier ein „Rahmen“ zur Verfügung, der nur angepasst werden muss.


<?php
/*
Plugin Name: Name des Widgetplugins
Plugin URI: http://
Description: Eine kurze Beschreibung
Author: Dein Name
Version: 0.0
License: deine Linzenzvergabe
Author URI: http://
*/

// Widget initialisieren, wenn Widget-Plugin aktiv
function FB_Init_Widget() {
  if (!function_exists('register_sidebar_widget'))
    return;
  
  // Dein Widget einbinden
  function widget_FB_DEIN_NAME($args) {
    if (is_home()) {
      extract($args);
      
      $options = get_option('widget_FB_DEIN_NAME');
      
        // Optionale Abfrage für die �bergabe von Parametern
        // Hier kann man beispielsweise OPTIONS abfragen
        $OPTION_1 = $options['OPTION_1'] ? 'checked="checked"' : '';
        if ($OPTION_1 == 'checked="checked"') $PARAMETER = 1;

      $title = $options['title'];
      
      echo $before_widget;
      
      if ($title != '') {
        echo $before_title . $title . $after_title;
      }
      
      // Nun rufen wir die Funktion(en) auf, die die neue Funktionalität enthält
      Der_Code_des_eigentlichen_Plugins($PARAMETER);
      
      echo $after_widget;
    }
  }

  // Hier steht der Code der Funktion(en), die die eigentliche Funktionalität enthält
  function Der_Code_des_eigentlichen_Plugins(Parameter) {
  
  }
  
  // Widget-Control
  function widget_control_FB_DEIN_NAME() {
    $options = $newoptions = get_option('widget_FB_DEIN_NAME');
    if ( $_POST['widget_FB_DEIN_NAME_submit'] ) {
      
      // Abfrage einer Option im Control-Fenster
      $newoptions['OPTION_1'] = isset($_POST['widget_FB_DEIN_NAME_OPTION_1']);
      
      // Abfrage des Title im Control-Fenster
      $newoptions['title'] = strip_tags(stripslashes($_POST['widget_FB_DEIN_NAME_title']));
    }
    if ( $options != $newoptions ) {
      $options = $newoptions;
      update_option('widget_FB_DEIN_NAME', $options);
    }
    
    $title = wp_specialchars($options['title']);
  ?>
    <!-- Ab hier die Ausgabe im Control-Fenster des Adminbereiches -->
    <p>
      <label for="widget_FB_DEIN_NAME_title"><?php _e('Title:'); ?> 
       <input style="width: 200px;" id="widget_FB_DEIN_NAME_title" name="widget_FB_DEIN_NAME_title" type="text" value="<?php echo $title; ?>" />
      </label>
    </p>
    <p style="text-align:right;margin-right:40px;">
      <label for="widget_FB_DEIN_NAME_OPTION_1" style="text-align:right;">OPTION_1 
       <input class="checkbox" type="checkbox" <?php echo $OPTION_1; ?> id="widget_FB_DEIN_NAME_OPTION_1" name="widget_FB_DEIN_NAME_OPTION_1" />
      </label>
    </p>
    <p style="text-align:right;margin-right:40px;"><?php echo $error; ?>
    </p>
    <input type="hidden" id="widget_FB_DEIN_NAME_submit" name="widget_FB_DEIN_NAME_submit" value="1" />
  <?php
  }
  
  // Widget im Admin-Panel hinzufügen - register_sidebar_widget($name, $callback) 
  register_sidebar_widget('DEIN_NAME', 'widget_FB_DEIN_NAME');
  // Zusätzliche Argumente im Widget-Control - register_widget_control($name, $callback, $width , $height);
  register_widget_control('DEIN_NAME', 'widget_control_FB_DEIN_NAME', 200, 100);
}

// Integration in WP - add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1);
add_action('plugins_loaded', 'FB_Init_Widget');
?>

Download:

Download als phps-Datei Download als phps-Datei: widget.phps

6 Kommentare und 3 Trackbacks zu „WP - Der „Rahmen“ für ein Widget Plugin“

  1. 1
    Pingback von Eigenes Widget schreiben | Software | Solutions | Juergens
  2. 2
    Pingback von redKite Weblog » Blog Archiv » Hilfe zur Erstellung von Widget Plugins in Wordpress
  3. 3
    Kommentar von Michael

    Vielen Dank für dies coole Template.
    Super Inline-Kommentare. Und Toll benannte Variablen. Da kommt jeder mit klar.

    Ich habe erst weit einer Woche ca. mit WordPress zutun, und bin stolz wie ein großer ein Widget gebastelt zu haben.

    Habe es gerade für ein TeamspeakViewer-SidebarWidget benutzt.
    Die Widget-controll-Seite ist ein wenig hackelig, aber da stellt man eh nur einmal ein :) )

    Also noch mal ... Viiiiieeelen Dank

  4. 4
    Pingback von Herb24-Kaufberatung » WYSIWYG Editor (tinymce) von Wordpress läd nicht!
  5. 5
    Kommentar von kunstgriff

    Moin Frank!
    Ich weiß, der Artikel hier ist inzwischen überholt, aber ich frage dich mal direkt an dieser Stelle, weil's thematisch passt: Ich arbeite an einem Theme auf Kubrick-Basis (ich mag's halt klassisch) und möchte die Anzeige von Kubrick, wo man sich nach seiner Suche befindet, gerne erhalten, aber da die Sidebar "widgetized" ist, verschwindet die bei Widget-Einsatz. Nun habe ich ein Widget daraus gemacht, dass sich problemlos installieren lässt. Aber unter >Darstellung >Widgets im Dashboard wird mein Plug-In trotzdem nicht angezeigt. Vielleicht hast du eine Idee, mir fällt kaum jemand mit mehr Kompetenz diesbezüglich ein.
    Hier mal der Code, damit du weisst, wovon ich schreibe:

    <?php printf(__('%2$s is awfully sorry for the inconvenience caused.', 'kubrick'), get_bloginfo('url'), get_bloginfo('name')); ?>

    <?php printf(__('You are currently browsing the %2$s archives for the %3$s category.', 'kubrick'), get_bloginfo('url'), get_bloginfo('name'), single_cat_title('', false)); ?>

    <?php printf(__('You are currently browsing the %2$s blog archives for the day %3$s.', 'kubrick'), get_bloginfo('url'), get_bloginfo('name'), get_the_time(__('l, F jS, Y', 'kubrick'))); ?>

    <?php printf(__('You are currently browsing the %2$s blog archives for %3$s.', 'kubrick'), get_bloginfo('url'), get_bloginfo('name'), get_the_time(__('F, Y', 'kubrick'))); ?>

    <?php printf(__('You are currently browsing the %2$s blog archives for the year %3$s.', 'kubrick'), get_bloginfo('url'), get_bloginfo('name'), get_the_time('Y')); ?>

    <?php printf(__('You have searched the %2$s blog archives for ‘%3$s’. If you are unable to find anything in these search results, you can try one of these links.', 'kubrick'), get_bloginfo('url'), get_bloginfo('name'), wp_specialchars(get_search_query(), true)); ?>

    <?php printf(__('You are currently browsing the %2$s blog archives.', 'kubrick'), get_bloginfo('url'), get_bloginfo('name')); ?>

    Hast du eine Idee, warum ich das Plug-In zwar in der dortigen Liste, nicht aber in unter >Widgets entdecken kann? Natürlich kann ich es so auch nicht installieren.
    Danke für deine Hilfe!
    LG aus Hamburg
    Jörg

  6. 6
    Kommentar von Frank Bültge

    Das Widget muss registriert sein, dann erscheint es auch dort: register_sidebar_widget( _('NAME'), 'id' ). Beim Hook
    add_action('widgets_init', 'deine_funktion', 1); muss dann die erste Funktion kommen.

  7. 7
    Kommentar von jan

    Und ich dachte widgets sind schon vorhanden bei wordpress , muss man diesen Quellqode da oben einbauen?

  8. 8
    Kommentar von Frank Bültge

    @jan: nein, dass ist der Code, wenn man eigene Widgets erstellen will, allerdings nur Für WP kleiner Version 2.8

  9. 9
    Kommentar von jan

    Ok danke, muss mich mal mehr mit Programmierung beschäftigen damit man einiges mehr allein einbauen kann :(

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.