preg_replace() und WordPress

preg_replace() und WordPress

Die PHP Funktion „preg_replace()“ Sucht und Ersetzt einen Regulären Ausdruck innerhalb eines Definierten Bereiches. Im Zusammenhang mit WordPress lässt sich so einiges Automatisieren.

WordPress bietet einige Filter und Hooks mit, die in Zusammenhang mit der PHP Funktion „preg_replace()“ zu einen mächtigen Tool werden.
Wir haben z.B. so die Möglichkeit, Innerhalb des Content Bereiches „the_content()“ vordefinierte Begriffe Suchen und Ersetzen zu lassen.
So können wir PHP z.B. dazu einsetzen, das Suchwort „wordpress“ automatisch durch „WordPress“ zu ersetzen. So können wir z.B. auch PHP Anweisen alle Begriffe Namens „Google“ durch einen Link zur Suchmaschine zu ersetzen. Die Möglichkeiten sind hier weitestgehend unbegrenzt.

Beispiel 1
In unserem Folgenden Beispiel, ersetzen wir das Wort „WordPress“ durch einen Link zur Offiziellen WordPress Webseite. Dabei wird „preg_replace()“ nur innerhalb des „the_content()“ Filters verwendet.


/**
 * preg_replace() Beispiel
 *
 * Suchen und Ersetzen innerhalb von the_content();
 */

    /* search string */
    $search[0] = '/WordPress/';

    /* replace with */
    $replacement[0] = '<a href="http://wordpress.org/" title="WordPress.org" rel="external">WordPress</a>';

    return preg_replace($search, $replacement, $text);
  }
  /** WordPress filter **/
  add_filter('the_content','content_filter');

Dieser kurze Code-Schnipsel in der functions.php deines WordPress Themes hinterlegt, greift sofort. PHP geht Automatisch hin und durchsucht vor der Ausgabe beim Nutzer, den Quelltext nach dem Wort „WordPress“ und ersetzt diesen durch einen Link zu WordPress.org. Jedoch nur bei der Verwendung von „the_content()“. Was aber nun, wenn wir dieses auch bei Auszügen haben wollen?

Kein Problem, auch hierfür bietet WordPress einen Filter an. Mit „the_excerpt()“ können wir nicht nur in unserem Template einen Auszug des Artikel oder der Seite erzeugen, sondern wir können dieses auch als Filter einsetzten. Wenn wir unseren Beispiel 1 Code mit folgender Angabe erweitern, durchsicht PHP auch die Auszüge nach dem Suchwort.


add_filter('the_excerpt','content_filter');

Aber mit preg_replace() und WordPress können wir weitaus mehr als nur Einfach Plumpe Wörter durch einen Link oder eine Korrekte Schreibweise ersetzen.
Wir können so auch erreichen, das sich bestimmte Funktionen von WordPress einfacher erweitern lassen ohne das man tief in das System eingreifen muss.

In yPress 1.1.0-dev verwendete ich preg_replace() um die Navigation im Kopfbereich des Themes zu Manipulieren. Ich Manipuliere so den WordPress Template Tag wp_page_menu() um einen span-Tag in die Ausgabe zu integrieren.

In der header.php des Themes kommt hierzu ganz einfach folgender Code zum Einsatz.


<div id="nav">
  <?php wp_page_menu('show_home=1&sort_column=menu_order&menu_class=hlist');?>
</div>

Im Falle von fkBlog.de würde die Ausgabe wie folgt aussehen ohne preg_replace() :


  <div id="nav">
    <div class="hlist">
      <ul>
        <li class="current_page_item"><a href="http://fkblog.de">Home</a></li>
        <li class="page_item page-item-280"><a title="Blog" href="http://fkblog.de/blog/">Blog</a></li>
        <li class="page_item page-item-164"><a title="About" href="http://fkblog.de/about/">About</a></li>
        <li class="page_item page-item-5"><a title="Impressum" href="http://fkblog.de/imprint/">Impressum</a></li>
        <li class="page_item page-item-9"><a title="Sitemap" href="http://fkblog.de/map/">Sitemap</a></li>
      </ul>
    </div>
  </div>

Mit der PHP Funktion preg_replace() würden wir folgende Ausgabe erhalten:


<div id="nav">
  <div class="hlist">
    <ul>
      <li class="current_page_item"><a href="http://fkblog.de">Home <span>Startseite</span></a></li>
      <li class="page_item page-item-280"><a title="Blog" href="http://fkblog.de/blog/">Aktuelles <span>Blog</span></a></li>
      <li class="page_item page-item-164"><a title="About" href="http://fkblog.de/about/">About <span>ÃÜber...</span></a></li>
      <li class="page_item page-item-5"><a title="Impressum" href="http://fkblog.de/imprint/">Rechtliches <span>Impressum</span></a></li>
      <li class="page_item page-item-9"><a title="Sitemap" href="http://fkblog.de/map/">Sitemap <span>XML-Sitemap</span></a></li>
    </ul>
  </div>
</div>

Damit das span-Attribut in wp_page_menu() eingebunden wird, wurde in der functions.php eine kleiner Code-Schnipsel hinterlegt mit preg_replace und einen WordPress Filter, der es mir erlaubt den Template Tag zu Manipulieren.
Folgender Code-Schnipsel liegt daher in der functions.php:


// Manipulation "wp_page_menu();"
function add_span($text) {

  $search[0] = '/>Home</';
  $search[1] = '/>About</';
  $search[2] = '/>Impressum</';
  $search[3] = '/>Blog</';
  $search[4] = '/>Sitemap</';

  $rep[0] = '>Home <span>Startseite</span><';
  $rep[1] = '>About <span>&Uuml;ber...</span><';
  $rep[2] = '>Rechtliches <span>Impressum</span><';
  $rep[3] = '>Aktuelles <span>Blog</span><';
  $rep[4] = '>Sitemap <span>XML-Sitemap</span><';

     return preg_replace($search, $rep, $text, 1);
      }
add_filter('wp_page_menu','add_span');

Es mag sicher nicht die beste Lösung zu sein, um den span-Tag in den Template Tage einzubinden, zum Zeitpunkt der Entwicklung von yPress 1.1.0-dev war es mir bis Dato aber die einfachste um mir bekannteste. Für yPress 1.2.0 wird eine alternative getestet, das ganze mittels Costum Fields zu realisieren.

Natürlich gibt es noch Zahlreiche andere Möglichkeiten, preg_replace in Verbindung mit WordPress Filtern/Hooks zu verwenden. Hier ist Testen und Probieren angesagt, jedenfalls bietet diese Methode eine recht gute Funktion um Inhalte Automatisch und ohne viel Aufwand suchen und Ersetzen zu lassen.

Weiteres zu den WordPress Hooks und Filtern findet ihr im Codex von WordPress.org.

WordPress Filter: http://codex.wordpress.org/Plugin_API/Filter_Reference
WordPress Aktionen: http://codex.wordpress.org/Plugin_API/Action_Reference

Artikel Informationen

Veröffentlicht am 5. November 2009 um 04:57 Uhr von Fabian.
Abgelegt unter WordPress.
Verwendete Schlagwörter: , , , , , , , .
Trackback URL | Kommentar-Feed .
Quelltext Anzeigen · Seite Drucken · Artikelnr. 367.

Ähnliche Artikel
Der Autor

Fabian Fabian Künzel wurde 1986 in Neuss geboren und lebt seit 1988 in der am Niederrhein liegenden Stadt Kleve. Seit 2000 beschäftigt er sich mit dem Thema Webdesign und ist seit 2004 Freier Webworker. Er unternimmt ausserdem viel mit seinen Freunden und seinem Hobby RC-Car das er seit Anfang 2009 nachgeht. Mehr Über ihn erfahrt ihr in seinem Web-Profil


Folgende Kommentare wurden hinterlassen

Es sind noch keine Kommentare vorhanden.

Hinterlasse auch du einen Kommentar

Deine Persönliche Angaben

Deine Kommentar Text

Vor dem Abschicken Lesen!

Um mir ein wenig Arbeit und Ärger zu ersparen, gibt es ein paar einfache Regeln und Hinweise, die beim Kommentieren auf fkBlog.de jeder einzuhalten hat.

Regeln!
  • Kommentare die Ausschließlich der Werbung eines Produktes oder der eigenen Webseite dienen, werden nicht Genehmigt und/oder Gelöscht.
  • Kommentare die nicht zum Thema oder zur Diskussion passen, werden ebenfalls ohne Ankündigung Gelöscht.
Hinweise!
  • Jeder 1. Kommentar muss erst von mir Freigeschaltet werden. Dies geschieht normalerweise innerhalb von 24Stunden.
  • Es wäre toll, wenn du mit deinen richtigen Vornamen Kommentierst oder einen Pseudonym unter denn man dich im Internet findet.