添加动作链接到WordPress插件的问题?

时间:2014-03-22 12:41:04

标签: wordpress plugins

我试图添加一些动作链接到WordPress插件。我从以下开始。

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="%s">%s</a>', admin_url( 'admin.php?page=wc-settings&tab=checkout' ), __( 'Configure', 'paypal-for-woocommerce' ) ),
            'docs'      => sprintf( '<a href="%s" target="_blank">%s</a>', 'http://docs.angelleye.com/paypal-for-woocommerce/', __( 'Docs', 'paypal-for-woocommerce' ) ),
            'support'   => sprintf( '<a href="%s" target="_blank">%s</a>', 'http://www.angelleye.com/contact-us/', __( 'Support', 'paypal-for-woocommerce' ) ),
            'review'    => sprintf( '<a href="%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 );
    }
}

除了它将链接放在当前启用的每个插件而不仅仅是我自己的插件上之外,这是有效的。我正在查看WordPress codex info about this,并显示使用附加到过滤器名称的文件名。所以我做了这样的调整:

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

但是,当我这样做时,所有链接都会完全消失,而且它们不会出现在任何地方,甚至不会出现在我自己的任何地方。我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

作为explained by Akshay,我们需要使用plugin_basename作为挂钩的后缀。但为了完整起见,还有一些遗漏的细节。

  1. 挂钩还可以使用前缀在多站点安装的“网络”屏幕中显示操作链接:

    $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. 该钩子有4个参数,可能包含构建链接的有用信息:

    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)
    }
    

    如果我们使用没有basename后缀的钩子,我们可以使用$plugin_file param来过滤掉我们的插件。

答案 1 :(得分:3)

使用plugin_basename( __FILE__ )代替__FILE__

使用以下过滤器添加操作链接。

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

我在我的一个插件中使用了这个过滤器,希望它也适合你。