Querdenkender Webworker mit WordPress-Affinität

Plugins: Minimale Voraussetzungen sicherstellen

Ich bin gerade dabei, an meinen Plugins all das nachzuarbeiten, was mir dringend erscheint. Das betrifft einige Nachbesserungen im Code und einige Features, die mir selbst wichtig sind. Beispielsweise soll scGeSHi zukünftig eine Seite im Administrationsbereich von WordPress bereitstellen, wo sich dann einige grundsäzliche Einstellungen vornehmen lassen. Zudem soll sich endlich auch der Cache leeren lassen.

Desweiteren will ich auch nur noch bedingt abwärtskompatibel schreiben. Wenn ich das richtig gelesen habe, wird WordPress mit der Version 3.2 sowieso die PHP-Version 5.2 einfordern und mir fehlt – ehrlich gesagt – auch die Lust und die Zeit, ständig nach hinten zu schauen, ob da irgendwer noch auf einer alten PHP-Installation sitzt. Es ist sogar so, dass mir die minimalen Anforderungen der WordPress-Entwickler nicht weit genug gehen.

Mit der PHP 5.3 ließen sich möglicherweise einige altbekannte Probleme durch die nun endlich eingeführten Namespaces vermeiden. Aber mal abgesehen davon, nutze ich beispielsweise jetzt schon ausgiebig die Transients API, die erst mit der WordPress-Version 2.8 eingeführt wurde. Damit ich nicht immer wieder sicherstellen muss, ob entsprechende Funktionen nun existieren oder nicht, hätte ich solche Fragen gern schon bei der Aktivierung des entsprechenden Plugins geklärt, was mich auf direktem Weg zu register_activation_hook und einem ersten Entwurf zur Thematik bringt:

<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 404 (Not Found)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:[email protected] screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:[email protected] only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) [email protected] only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
 </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>404.</b> <ins>That’s an error.</ins>
  <p>The requested URL <code>/svn/trunk/examples/register_activation_hook.php</code> was not found on this server.  <ins>That’s all we know.</ins>

Mit register_activation_hook wird eine Funktion registriert, die nur bei der Aktivierung eines Plugins ausgeführt wird. Es ist wichtig zu wissen, dass man innerhalb der Funktion nicht direkt auf die globalen Variablen der WordPress-Instanz zugreifen kann, weshalb ich die verwendete Version nicht über $wp_version sondern mittels get_bloginfo(‚version‘) in Erfahrung bringe. Die PHP-Version kann man übrigens auch über die Konstante PHP_VERSION abfragen, aber das ist in meinen Augen reine Geschmacksache.

Desweiteren benutze ich für den Vergleich der Versionsnummern die PHP-Funktion version_compare, was mir sinnvoller erscheint, als so einige seltsame Konstrukte, die mir bereits über den Weg gelaufen sind. Schließlich sorge ich dafür, dass sich das Plugin im Fehlerfall wieder selbst deaktiviert. Lässt man die Funktion lediglich mit die() sterben, wird zwar eine Fehlermeldung ausgegeben, aber das Plugin wird letzten Endes trotzdem aktiv sein. Das erschien mir anfangs etwas verwirrend, ist aber logisch, wenn man sich überlegt, wann der Vorgang genau angestoßen wird.

Falls jemand eine bessere Variante hat, immer her damit. Ich bin gespannt!

Das könnte Dich auch interessieren:

Kommentare

  1. Da ich für 2011 ein eigenes WP3-Blog in der Pipeline habe und dafür vermutlich auch kleinere Plugins schreibe, werde ich den vorgestellten Ansatz direkt mit umsetzen. Deswegen danke für den Beitrag.

  2. Gern geschehen. 😉

Deine Meinung ist uns wichtig

*