Probleme beim Hinzufügen von Aktionslinks zum WordPress-Plugin?

Lesezeit: 3 Minuten

Benutzeravatar von Drew Angell
Zeichnete Angell

Ich versuche, einem WordPress-Plugin einige Aktionslinks hinzuzufügen. Ich habe mit folgendem angefangen.

class Angelleye_PayPal_WooCommerce
{
    public function __construct()
    {
        add_filter('plugin_action_links', array($this,'plugin_action_links'));
    }

    public function plugin_action_links($actions)
    {
        $custom_actions = array(
            'configure' => sprintf( '<a href="https://stackoverflow.com/questions/22577727/%s">%s</a>', admin_url( 'admin.php?page=wc-settings&tab=checkout' ), __( 'Configure', 'paypal-for-woocommerce' ) ),
            'docs'      => sprintf( '<a href="https://stackoverflow.com/questions/22577727/%s" target="_blank">%s</a>', 'http://docs.angelleye.com/paypal-for-woocommerce/', __( 'Docs', 'paypal-for-woocommerce' ) ),
            'support'   => sprintf( '<a href="https://stackoverflow.com/questions/22577727/%s" target="_blank">%s</a>', 'http://www.angelleye.com/contact-us/', __( 'Support', 'paypal-for-woocommerce' ) ),
            'review'    => sprintf( '<a href="https://stackoverflow.com/questions/22577727/%s" target="_blank">%s</a>', 'http://wordpress.org/support/view/plugin-reviews/paypal-for-woocommerce', __( 'Write a Review', 'paypal-for-woocommerce' ) ),
        );

        // add the links to the front of the actions list
        return array_merge( $custom_actions, $actions );
    }
}

Dies funktioniert, außer dass es die Links auf jedes einzelne Plugin setzt, das derzeit aktiviert ist, anstatt nur auf mein eigenes. Ich schaue mir die an WordPress-Codex-Infos dazu, und es wird angezeigt, dass der an den Filternamen angehängte Dateiname verwendet wird. Also habe ich die Anpassung wie folgt vorgenommen:

add_filter('plugin_action_links_'.__FILE__, array($this,'plugin_action_links'));

Wenn ich das tue, verschwinden jedoch alle Links vollständig und sie werden nirgendwo angezeigt, nicht einmal bei meinen eigenen. Was mache ich hier falsch?

Benutzeravatar von brasofilo
brasophilo

Wie von Akshay erklärt, müssen wir die verwenden plugin_basename als Suffix für den Haken. Aber der Vollständigkeit halber noch ein paar fehlende Details.

  1. Der Haken kann auch ein Präfix annehmen, um die Aktionslinks im Netzwerkbildschirm einer Multisite-Installation anzuzeigen:

    $basename = plugin_basename( __FILE__ );
    $prefix = is_network_admin() ? 'network_admin_' : '';
    add_filter( 
        "{$prefix}plugin_action_links_$basename", 
        array( $this,'plugin_action_links' ), 
        10, // priority
        4   // parameters
    );
    
  2. Der Hook nimmt 4 Parameter entgegen, die nützliche Informationen zum Aufbau der Links enthalten können:

    public function plugin_action_links( $actions, $plugin_file, $plugin_data, $context ) 
    {
        // $plugin_file is the plugin_basename
        // $plugin_data contains the plugin's header information
        // $context is the current screen (all: All plugins, active: Active plugins)
    }
    

    Wenn wir den Hook ohne das Suffix des Basisnamens verwenden, können wir das verwenden $plugin_file param, um nur unsere Plugins herauszufiltern.

  • Nun, das ist seltsam. Ich versuche genau dasselbe in einem neuen Plugin und es funktioniert bei mir nicht. Irgendeine Idee was ich hier falsch mache? Ich habe den Action-Link-Code aus dem funktionierenden Plugin kopiert und in das neue eingefügt. Funktioniert noch im Original, aber nicht hier..??

    – Zeichnete Angell

    15. Januar 2015 um 4:09 Uhr

Verwenden plugin_basename( __FILE__ ) Anstatt von __FILE__.

Verwenden Sie den folgenden Filter, um Aktionslinks hinzuzufügen.

add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array($this, 'plugin_action_links') );

Ich hatte diesen Filter in einem meiner Plugins bearbeitet, hoffe, dass er auch für Sie funktioniert.

1428900cookie-checkProbleme beim Hinzufügen von Aktionslinks zum WordPress-Plugin?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy