【问题标题】:Problems adding action links to WordPress plugin?向 WordPress 插件添加操作链接时出现问题?
【发布时间】:2014-03-22 12:41:04
【问题描述】:

我正在尝试向 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'));

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

【问题讨论】:

    标签: wordpress plugins


    【解决方案1】:

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

      如果我们使用不带基本名称后缀的钩子,我们可以使用$plugin_file 参数仅过滤掉我们的插件。

    【讨论】:

    • 嗯,这很奇怪。我正在一个新插件中尝试同样的事情,但它对我不起作用。任何想法what I'm doing wrong here?我从正在工作的插件中复制了操作链接代码并将其粘贴到新插件中。仍然可以在原始版本中使用,但在这里不行..??
    【解决方案2】:

    使用plugin_basename( __FILE__ ) 代替__FILE__

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多