Skip to content

Ajax im Dashboard

WordPress bietet wirklich viele Möglichkeiten die Themes anzupassen und um Funktionen mittels Plugins zu erweitern. Im Admin Menü ist jedoch fast alles statisch und bei den grundlegenden Funktionen ist es oftmals schwer und fast unmöglich Anpassungen vorzunehmen.

Dieser Artikel soll vorallen als Denkanstoß für die Erstellung von Adminplugins oder internen Erweiterungen der Funktionalität dienen.
In meinem Beispiel Plugin werde ich eine Ajaxfunktion erstellen mit der man innerhalb des Artikel Titels nach bisherigen Artikeln suchen kann. Gerade bei vielen Artikeln, Artikelserien oder mehreren Autoren kann diese Funktion äußerst hilfreich sein um keine doppelten oder ähnliches Posts zu erzeugen.

Sicherlich haben sich schon viele eine Live Suche im Dashboard von WordPress gewünscht, das hier vorgestellt sollte jedoch nur als Grundlage für ein solches Plugin gesehen werden.
Einen guten Einstieg um AJAX in Plugins nutzen zu können findet man im WordPress Codex.
Nun benötigen wir nur noch ein einfaches Javascript, dass eine Live Suche ermöglicht. Bei meiner Recherche habe ich das jQuery Live Search Plugin von Andreas Lagerkvist gefunden. Dieses Plugin kann eine URL mit einem Query aus jedem beliebigen Inputfeld aufrufen und stellt das Ergebnis dar.

Unser Plugin wp_admin_ajax besteht im groben aus der Klasse WPAdminAjax und den Funktionen ajax_post_search, post_search_callback und ajax_post_search_footer.

  1.  
  2. <?
  3. /**
  4.  Plugin Name: WordPress Admin Ajax
  5.  Plugin URI: http://gefruckelt.de/
  6.  Version: 1.0
  7.  Description: Ajax Suche in der Titel Zeile
  8.  Author: Jens Altmann
  9.  Author URI: http://gefruckelt.de
  10.  */
  11.  
  12. if ( !defined( ‚WP_ADMIN_URL‘ ) )
  13.         define( ‚WP_ADMIN_URL‘, get_option( ’siteurl‘ ) . ‚/wp-admin‘ );
  14.  
  15. if ( !defined( ‚WP_CONTENT_URL‘ ) )
  16.         define( ‚WP_CONTENT_URL‘, get_option( ’siteurl‘ ) . ‚/wp-content‘ );
  17.        
  18. if ( !defined( ‚WP_PLUGIN_URL‘ ) )
  19.         define( ‚WP_PLUGIN_URL‘, WP_CONTENT_URL. ‚/plugins‘ );
  20.        
  21. if ( !defined( ‚WP_CONTENT_DIR‘ ) )
  22.         define( ‚WP_CONTENT_DIR‘, ABSPATH . ‚wp-content‘ );
  23.        
  24. if ( !defined( ‚WP_PLUGIN_DIR‘ ) )
  25.         define( ‚WP_PLUGIN_DIR‘, WP_CONTENT_DIR . ‚/plugins‘ );
  26.        
  27. define( ‚WP_ADMIN_AJAX_URL‘, WP_PLUGIN_URL.‚/wp_admin_ajax‘ );
  28. define( ‚WP_ADMIN_AJAX_PATH‘, WP_PLUGIN_DIR.‚/wp_admin_ajax‘ );
  29. define( ‚WP_ADMIN_AJAX_PLUGIN_PATH‘, WP_ADMIN_AJAX_PATH.‚/plugins‘ );
  30.  
  31.  
  32.  
  33. if (!class_exists("WPAdminAjax"))
  34. {
  35.   class WPAdminAjax
  36.   {
  37.     function WPAdminAjax()
  38.     {
  39.       $this->addActions();
  40.     }
  41.    
  42.     function addActions()
  43.     {
  44.       add_action(‚admin_head‘, array($this, ‚ajax_post_search‘));
  45.       add_action(‚wp_ajax_post_search‘, array($this, ‚post_search_callback‘));
  46.       add_action(‚admin_footer‘, array($this, ‚ajax_post_search_footer‘));
  47.  
  48.     }
  49.    
  50.    
  51.     function ajax_post_search_footer()
  52.     {
  53.       echo ‚<script type="text/javascript">jQuery(\‘input[name="post_title"]\‘).liveSearch({url: \‘.WP_ADMIN_URL.‚/admin-ajax.php?action=post_search&query=\‘});</script>‘;
  54.     }
  55.    
  56.     function ajax_post_search()
  57.     {
  58.       echo ‚<script type="text/javascript" src="‘.WP_ADMIN_AJAX_URL.‚/jquery.liveSearch.js‘.‚"></script>‘;
  59.       echo ‚<link rel="stylesheet" href="‘.WP_ADMIN_AJAX_URL.‚/jquery.liveSearch.css‘.‚" type="text/css" />‘;
  60.      
  61.     }
  62.    
  63.     function post_search_callback()
  64.     {
  65.       global $wpdb; // this is how you get access to the database
  66.       $query = $_GET[‚query‘];
  67.      
  68.       $posts = get_posts(array(‚post_type‘ => ‚post‘, ’numberposts‘ => 1000, ‚post_status‘ => ‚publish, pending, draft, future‘, ‚orderby‘ => ‚post_title‘));
  69.      
  70.       $cnt = count($posts);
  71.       echo ‚<ul>‘;
  72.       for ($i = 0 ; $i < $cnt ; $i++)
  73.       {
  74.         if (stripos($posts[$i]->post_title, $query) === FALSE)
  75.           continue;
  76.        
  77.         echo ‚<li>‘;
  78.         echo ‚<a href="‘.WP_ADMIN_URL.‚/post.php?post=‘.$posts[$i]->ID.‚&action=edit">‘.$posts[$i]->post_title.‚</a>‘;
  79.         echo ‚</li>‘;
  80.       }
  81.       echo ‚</ul>‘;
  82.      
  83.       die(); // this is required to return a proper result
  84.     }
  85.  
  86.    
  87.   }
  88. }
  89.  
  90. $wp_admin_ajax = NULL;
  91. if (class_exists("WPAdminAjax"))
  92. {
  93.   $wp_admin_ajax = new WPAdminAjax();
  94. }
  95.  
  96. ?>
  97.  

In der Funktion ajax_post_search wird der Head Bereich im Dashboard durch die Javascript und CSS Klasse des jQuery Live Search Plugins erweitert.
In der post_search_callback erstellen wir eine Callback Funktion, die mit dem Aufruf der admin-ajax.php durch das AJAX Script ausgeführt wird. Diese lädt einfach 1000 Artikel vom Typ ‚post‘ und prüft danach ob der Query im Titel der einzelnen Artikel enthalten ist. Falls dies der Fall ist werden die entsprechenden Artikel in einer Liste aufgenommen und entsprechend verlinkt. Ich weise an dieser Stelle nochmal darauf hin, dass die Logik inperformant ist!
Die ajax_post_search_footer sorgt dafür, dass das Eingabefeld um die AJAX Funktionalität erweitert wird. Wird müssen dem Plugin lediglich die URL der Suchseite mitgeben.

Um das Script selbst zu testen müsst ihr einen Ordner namens wp_admin_ajax erstellen, den oben stehenden Code als wp_admin_ajax.php speichern und die Dateien des jQuery Plugins in den Ordner kopieren. Nun könnt ihr den Ordner in euer WordPress Plugin Verzeichnis hochladen und aktivieren.

Und so sieht das Ergebnis aus :

wp_admin_ajax Vorschau

wp_admin_ajax Vorschau

Jens Altmann

Avatar Jens Altmann

Jens Altmann bloggt auf gefruckelt.de regelmäßig über alle Themen, die ihn interessieren. Neben seiner Tätigkeit als Softwarearchitekt studiert er Wirtschaftsinformatik an der Uni Potsdam.

Weitere Informationen über Jens Altmann

Interessante Artikel

Kommentare

Keine Kommentare

Kommentiere diesen Artikel als erstes!

Kommentiere den Artikel

Required

Required

Optional