Sidebar
ein-/ausblenden

Meta Links bei WordPress Plugins

Plugin für WordPress SEO

Anzeige

In der Vergangenheit habe ich schon im Artikel „WordPress Plugins bereichern“ erläutert, wie man Plugins um einige nützliche Funktionen erweitert und so die Nutzung optimiert. Dabei gib es unter anderem um den Absprung mit Hilfe eines einfachen Links zur Options-Seite des Plugins.
Mit WordPress 2.8 wird die Plugin-Seite ein wenig verändert sein und so gibt es einen Hook, den man bequem mit dem Link befüllen kann und den Komfort ein wenig erhöht.

Die Möglichkeit, die hier im Tutorial erklärt wird, klappt erst ab Version 2.8 von WordPress, in der Version 2.7 musste das anders geschehen, dazu dient der schon erwähnte Artikel „WordPress Plugins bereichern“ oder ohne große Erklärung der folgende Schnipsel.


/**
 * @version WP 2.7
 * Add action link(s) to plugins page
 */
function set_plugin_meta27($links) {

	$plugin = plugin_basename(__FILE__);

	$settings_link = sprintf( '<a href="options-general.php?page=%s">%s</a>', $plugin, __('Settings') );
	array_unshift( $links, $settings_link );

	return $links;
}

add_filter( 'plugin_action_links_' . $plugin, 'set_plugin_meta27' );

Ab Version 2.8 sieht das Backend leicht verändert aus und so werden auch die Meta Links zu Plugins anders präsentiert. Dazu gibt es aber einen Hook, so dass man den Inhalt zu den Plugins und die Links zum Plugin selbst erweitern kann. Der folgende Screenshot sollte das verdeutlichen.

Screenshot Beispiel Link am Plugin

Um nun den Link zur Options-Site zu setzen, dient der folgenden Code, der die URL des Links aus den Plugin-Daten nutzt und der Begriff „Settings“ muss in dem Fall nicht für die Mehrsprachigkeit erweitert werden, da er im Sprachpaket von WordPress dabei ist und somit automatisch beim Umstellen des Backend auf eine neue Sprache übersetzt wird.


function set_plugin_meta($links, $file) {

	$plugin = plugin_basename(__FILE__);

	// create link
	if ($file == $plugin) {
		return array_merge(
			$links,
			array( sprintf( '<a href="options-general.php?page=%s">%s</a>', $plugin, __('Settings') ) )
		);
	}

	return $links;
}

add_filter( 'plugin_row_meta', 'set_plugin_meta', 10, 2 );

Alternativ kann folgenden Funktion aufgerufen werden, die den Link vor die Links von WP setzt, was ich für übersichtlicher halte. Die Funktion wird im Anschluss je nach Version von WordPress aufgerufen, dabei kann die Funktion für 2.7 und 2.8 genutzt werden; ich hooke lediglich bei 2.8 nochmal, so dass der Link auch im rechten Bereich vorhanden ist.


// plugin definitions
define( 'FB_BASENAME', plugin_basename( __FILE__ ) );
define( 'FB_BASEFOLDER', plugin_basename( dirname( __FILE__ ) ) );
define( 'FB_FILENAME', str_replace( FB_BASEFOLDER.'/', '', plugin_basename(__FILE__) ) );

function filter_plugin_meta($links, $file) {

	/* create link */
	if ( $file == FB_BASENAME ) {
		array_unshift(
			$links,
			sprintf( '<a href="options-general.php?page=%s">%s</a>', FB_FILENAME, __('Settings') )
		);
	}

	return $links;
}

global $wp_version;
if ( version_compare( $wp_version, '2.8alpha', '>' ) )
	add_filter( 'plugin_row_meta', 'filter_plugin_meta', 10, 2 ); // only 2.8 and higher
add_filter( 'plugin_action_links', 'filter_plugin_meta', 10, 2 );

Diese kleine Erweiterung im Plugin macht nicht viel Mühe und stellt aus meiner Sicht trotzdem einen Mehrwert dar, der es dem Nutzer einfach macht, die Options-Seite zum Plugin aufzusuchen. Schade nur, dass die Entwickler von WordPress jedesmal diesen Hook ändern und man nun schon fast zu jeder neuen Version von WordPress eine eigene Funktion benötigt um diesen kleinen Mehrwert zu setzen.

12 Kommentare zu „Meta Links bei WordPress Plugins“

  1. 1
    Kommentar von Sergej Müller

    Frank, scheinbar interessiert sich keiner für die Methode. Naja ;)

  2. 2
    Kommentar von Frank Bültge

    In einem engl. Blog habe ich gerade einen Artikel gelesen, heute veröffentlicht, wie man es mit der alten Methode macht. Das kommt schon. So viele Entwickler gibt es scheinbar nicht, die diesen kleinen Mehrwert nutzen wollen und schon in 2.8 denken. Danke dir nochmal für den Tipp, denn von dir ist ja quasi der Kern, ich habe es nur umschrieben. Bei mir liegt so viel auf Halde mit 2.8, was ich zum Teil nur im Buch habe, dass ich nicht nachkomme.

  3. 3
    Kommentar von Thomas

    Halo Frank schön wieder von dir zu lesen.
    Ich freue mich schon auf die neue WP Version, doch habe ich auch ein wenig Angst, da ich meinen Blog so umgebaut habe und halt nicht sehr viel davon verstehe.
    Deswegen umso mehr freude dann deine Tipps weiter verfolgen zu können.

    Viele grüße
    Thomas

  4. 4
    Kommentar von Frank Bültge

    @Thomas: Welche Version fährst du und hast du am Core geändert?

  5. 5
    Kommentar von Thomas

    Hallo Frank,
    ich habe WP2.7.1 und nur das Design geändert. Also Sitebar neu mit der 250er Fläche oben z.B. sonst soweit nur am CSS und hier und da Kleinigkeiten. Da es mein erster selbstgebauter Blog ist, zwar am Anfang mit der Artisteergrundlage, ist davon nicht mehr viel übrig geblieben. Ich habe soviel geändert und weiß nicht mehr was alles.

  6. 6
    Kommentar von Frank Bültge

    @Thomas: insofern du nur am Frontend gebaut hast, ist das kein Problem und das Update auf 2.8 sollte ohne Probleme laufen. Die meisten Plugins werden ebenso wenig etwas einbüßen und sollten laufen.

  7. 7
    Kommentar von Thomas

    Super vielen dank, ich habe sonst meist mit dem Update immer ein wenig gewartet. Doch es gibt mir zusätzliche Sicherheit wenn du es schreibst. Ja Frank um dir zuvor zukommen ich mache erst ein Backup :-)

    Danke für deine Hilfe und ermunternden Worte
    Thomas

  8. 8
    Kommentar von Sergej Müller

    Frank, was mich wirklich ein wenig stört, ist die Tatsache, dass selbst Plugins aus dem Hause Automattic keine Vorzeigeobjekte sind. Eigentlich müsste es ein Standard-Plugin gegeben, wo solche Möglichkeiten implementiert und aufgezeigt sind, damit Entwickler diese Option wahrnehmen und nicht den Core danach absuchen müssen. Wie das Defaupt-Thema halt ;)

  9. 9
    Kommentar von Frank Bültge

    @Sergej: In der Mailingslist der wp-hacker wurde das schon mehrfach diskutiert, ohne erfolg. Noch immer sieht man "Hello Dolly" für diese Aufgabe. Nur leider ist in diesem Plugin verdammt wenig an Beispielen drin, ist mehr Syntax für Literaturaspiranten. Eine Lösung sehe ich aber nicht, es bleibt Aufgabe der Blogs mit dem Thema WordPress.

  10. 10
    Kommentar von Florian

    Hallo Frank,

    ich möchte für mein Plugin um die oben beschriebene Funktion erweitern, leider tut es nicht so wie es soll:

    // Add settings link on plugin page
    add_filter('plugin_action_links', 'myplugin_settings_link', 10, 2);

    function myplugin_settings_link($links, $file) {
    static $this_plugin;

    if (!$this_plugin) {
    $this_plugin = plugin_basename(__FILE__);
    }

    if ($file == $this_plugin) {
    // The "page" query string value must be equal to the slug
    // of the Settings admin page we defined earlier, which in
    // this case equals "myplugin-settings".
    $settings_link = 'Settings';
    array_unshift($links, $settings_link);
    }

    return $links;
    }

    Ich habe die aktuelle WP Version drauf. Im Backend unter Plugins wird einfach überhaupt nichts angezeigt. Hast du eine Idee?

    Viele Grüße

  11. 11
    Kommentar von Frank Bültge

    @Florian: habe ich so gut wie allen Plugins von mir drin, kannst also damit mal abgleichen und den Fehler suchen. Schaue mal hier direkt im Source.

  12. 12
    Kommentar von BMo

    Nachdem der Google+ Button nun verfügbar ist, kam ich auf die Idee diesen in mein Plugin zu integrieren.
    Dabei habe ich mich an diesem tollen Tutorial hier orientiert. Vielen Dank! Klappt super. Falls jemand wissen möchte, wie genau das mit dem Google Plus Button geht, kann man es hier nachlesen.
    http://software.bmo-design.de/how-to-integrate-google-plus-into-your-wordpress-plugin
    Vielen Dank und weiter so!
    Grüße Benedikt

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.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

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.