web-dev-qa-db-ja.com

Plugin_action_linksフィルター内からプラグイン名を決定します

フィルタを処理するときに plugin_action_links フィルタがどのプラグインをアドレス指定しているかを判断する方法はありますか?

私は/wp-admin/plugins.phpページの各プラグインにいくつかのアクションを追加しようとしています。コードは以下のようになります。

public function _add_plugin_links(){
    $plugins = get_plugins();
    foreach($plugins as $k=>$plugin){
        add_filter( 'plugin_action_links_' . $k, array(&$this, '_plugin_action_links') );
    } // foreach $plugins
}

public function _plugin_action_links( $links ) {
   $plugin = 'test'; // Somehow get plugin name here?
   $links[] = 'Plugin name is: '.$plugin;
   return $links;
}

このテキストを各プラグインのリンクリストの最後に追加することはできますが、どのプラグインにテキストを追加するのかを正確に判断することはできません。 _add_plugin_links()内からグローバル変数を追加しても、プラグインリストから解析された最後のプラグインが返されるだけです。

2
emc

現在 4つのフィルタ があり、それらはたくさんの情報を運びます:

$prefix = $screen->in_admin( 'network' ) ? 'network_admin_' : '';
$actions = apply_filters( $prefix . 'plugin_action_links', array_filter( $actions ), $plugin_file, $plugin_data, $context );
$actions = apply_filters( $prefix . "plugin_action_links_$plugin_file", $actions, $plugin_file, $plugin_data, $context );

これは高度なカスタムフィールドのパラメータのvarダンプです。

Array
(
    [0] => Array
        (
            [activate] => <a href="plugins.php?action=activate&amp;plugin=advanced-custom-fields%2Facf.php&amp;plugin_status=all&amp;paged=1&amp;s&amp;_wpnonce=62d37299ca" title="Activate this plugin for all sites in this network" class="edit">Network Activate</a>
            [edit] => <a href="plugin-editor.php?file=advanced-custom-fields/acf.php" title="Open this file in the Plugin Editor" class="edit">Edit</a>
            [delete] => <a href="plugins.php?action=delete-selected&amp;checked%5B0%5D=advanced-custom-fields%2Facf.php&amp;plugin_status=all&amp;paged=1&amp;s&amp;_wpnonce=b7f1cf2b36" title="Delete this plugin" class="delete">Delete</a>
        )
    [1] => advanced-custom-fields/acf.php
    [2] => Array
        (
            [Name] => Advanced Custom Fields
            [PluginURI] => http://www.advancedcustomfields.com/
            [Version] => 4.2.2
            [Description] => Fully customise WordPress edit screens with powerful fields. Boasting a professional interface and a powerfull API, it’s a must have for any web developer working with WordPress. Field types include: Wysiwyg, text, textarea, image, file, select, checkbox, page link, post object, date picker, color picker, repeater, flexible content, gallery and more!
            [Author] => Elliot Condon
            [AuthorURI] => http://www.elliotcondon.com/
            [TextDomain] => 
            [DomainPath] => 
            [Network] => 
            [Title] => Advanced Custom Fields
            [AuthorName] => Elliot Condon
        )
    [3] => all
)

あなたは裸のplugin_actions_linkを使用してプラグインファイルを検出することができます、しかしそれは2番目のほうが簡単です。 wp-admin/network/plugins.phpのACFにアクションリンクを追加する例:

add_filter( 'network_admin_plugin_action_links_advanced-custom-fields/acf.php', function( $actions, $plugin_file, $plugin_data, $context )
{
    $actions['hello'] = 'Hello worlds!';
    return $actions;
}, 10, 4 );

その他の興味深いフィルタ: plugin_row_meta

2
brasofilo