Como usar los filtros plugin_action_links y plugin_row_meta

En la lista de plugins instalados en el panel de administración de WordPress se pueden encontrar enlaces bajo el nombre del plugin a la izquierda (Desactivar, Editar) y otros enlaces bajo la descripción del plugin a la derecha, junto a otra información como la versión del plugin (Por el autor, Ver detalles).

default_action_links_es

Los enlaces que aparecen en la imagen encima de estas líneas son los que WordPress muestra por defecto, con excepción del enlace del autor que se define en el archivo principal del plugin donde se dan todos los detalles sobre el mismo Plugin Name, Description, Version, Author, Author URI…

No hace mucho publiqué un snippet de código muy sencillo para añadir enlaces debajo del nombre del plugin, como Ajustes o FAQ (o ambos). Pero con este snippet sólo se pueden añadir los enlaces al final de los ya existentes por defecto.

Tal vez lo que necesitas, además de mostrar enlaces adicionales, es la posibilidad de elegir si los quieres al principio o al final de los ya existentes. Y también puede que quieras añadir enlaces justo debajo de la descripción del plugin (a la derecha).

Hay disponibles 2 filtros diferentes para hacer esto, plugin_action_links para añadir enlaces debajo del nombre del plugin y plugin_row_meta para añadirlos debajo de la descripción del plugin.

additional_action_links_es

En el siguiente código veremos como usar los filtros plugin_action_links y plugin_row_meta. Las funciones my_add_action_links y my_plugin_row_meta, básicamente harían lo mismo, así que he creado una tercera función plugin_action_links que será convocada por las dos primeras, donde se pueden pasar como argumentos un array de los enlaces a mostrar y la posición de los mismos (antes o después de los enlaces por defecto).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
add_filter( 'plugin_action_links', 'my_add_action_links', 10, 5 );
add_filter( 'plugin_row_meta',     'my_plugin_row_meta', 10, 2 );
 
/**
 * my_add_action_links
 */
 
function my_add_action_links( $actions, $plugin_file ) {
 
 $action_links = array(
 
   'settigns' => array(
      'label' => __('Settings', 'my_domain'),
      'url'   => get_admin_url(null, 'options-general.php?page=my-plugin-options')
    ), 
 
   'faq' => array(
      'label' => __('FAQ', 'my_domain'),
      'url' => 'http://www.my-plugins-site.com/faq'
       )
   );
 
  return plugin_action_links( $actions, $plugin_file, $action_links, 'before');
}
 
/**
 * my_plugin_row_meta
 */
 
function my_plugin_row_meta( $actions, $plugin_file ) {
 
 $action_links = array(
 
   'donate' => array(
      'label' => __('Donate', 'my_domain'),
      'url'   => 'http://www.my-plugins-site.com/donate'
    ));
 
  return plugin_action_links( $actions, $plugin_file, $action_links, 'after');
}
 
/**
 * plugin_action_links
 */
 
function  plugin_action_links ( $actions, $plugin_file,  $action_links = array(), $position = 'after' ) { 
 
  static $plugin;
 
  if( !isset($plugin) ) {
      $plugin = plugin_basename( __FILE__ );
  }
 
  if( $plugin == $plugin_file && !empty( $action_links ) ) {
 
     foreach( $action_links as $key => $value ) {
 
        $link = array( $key => '<a href="' . $value['url'] . '">' . $value['label'] . '</a>' );
 
         if( $position == 'after' ) {
 
            $actions = array_merge( $actions, $link );    
 
         } else {
 
            $actions = array_merge( $link, $actions );
         }
 
 
      }//foreach
 
  }// if
 
  return $actions;
 
}

Añadir un elemento de submenu a un menu admin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function);
Ejemplo para menú Herramientas
*/
add_action('admin_menu', 'add_submenu_item');
 
function add_submenu_item(){
     add_submenu_page( 'tools.php', 'My Tool', 'My Tool', 'manage_options', 'my-tool', 'display_page');
     // or
     // add_management_page( 'My Tool', 'My Tool', 'manage_options', 'my-tool', 'display_page' );
} 
 
/**
- Ajustes: options-general.php o usar add_options_page()
- Escritorio: index.php o usar add_dashboard_page()
- Entradas: edit.php o usar add_posts_page()
- Páginas: edit.php?post_type=page o usar add_pages_page()
- Custom post type: edit.php?post_type=custom_post_type
- Medios: upload.php  o usar add_media_page()
- Comentarios: edit-comments.php o usar add_comments_page()
- Apariencia: themes.php o usar add_theme_page()
- Plugins: plugins.php o usar add_plugins_page()
- Usuarios: users.php o usar add_users_page()
- Herramientas: tools.php o usar add_management_page()
*/

Plugin “Duplicate Menu”

Este es un plugin simple pero muy útil que nos ayudará a ahorrar mucho tiempo.

Con este plugin, como ya has podido adivinar por el nombre, puedes duplicar un menú para añadirlo en cualquier otro sitio de tu web,

Imagina que tienes una navegación principal bastante grande (o no tan grande)  y te gustaría añadir la misma navegación en el footer de tu página. Con este plugin podrás hacer esto con tan sólo unos cuantos clicks, sino tendrías que crear el menú manualmente y añadir tus páginas (o lo que quisieras añadir) una por una. Así que con este plugin vas a ahorrar muchísimo tiempo.

Puedes encontrarlo en el repositorio de wordpress.org  http://wordpress.org/plugins/duplicate-menu/

Después de instalarlo dirígete a  Apariencia -> Duplicate menu.

duplicate-menu-1

Duplica tu menú y después ves a Apariencia -> Menús, y podrás ver tu nuevo menú en la lista.

duplicate-menu-2

Añadir enlace Ajustes a la página de plugins

1
2
3
4
5
6
7
8
9
function my_add_action_links( $links ) {
 
    $url = get_admin_url(null, 'options-general.php?page=plugin_name');
 
    $links[] = '<a href="'. $url .'">Settings</a>';
    return $links;
}
 
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'my_add_action_links' );