web-dev-qa-db-fra.com

Comment créer des liens en haut de WP_List_table?

J'essaie de créer des liens tels que ceux de l'onglet publication (voir l'image ci-dessous).

enter image description here

J'ai créé mon WP_List_table mais je ne sais pas comment créer ces liens ni comment les amener à afficher une requête de base de données différente.

Je connais la fonction extra_tablenav dans la classe, mais cela ajoute des éléments après la zone d'action globale, de sorte que cela ne semble pas faire ce que je veux.

5
Kirill Fuchs

Comme mentionné dans les commentaires, s'il s'agit d'une table existante à laquelle vous souhaitez ajouter/supprimer des liens, voir cette réponse .

S'il s'agit d'une sous-classe personnalisée de WP_List_Table, par exemple:

class Wpse56883_WP_List_Table extends WP_List_Table{

 //Class methods here

}

Ensuite, vous ajoutez ces liens en redéfinissant la méthode get_views(). Cela devrait retourner un tableau: array ( id => link ). Cela devrait renvoyer à la page, en attachant une valeur à une variable de requête (que j'appellerai customvar).

Lors de la construction des liens, recherchez la valeur actuelle pour customvar et ajoutez conditionnellement la classe current pour mettre en surbrillance la vue actuelle en gras.

Alors (à l'intérieur) de votre classe.

function get_views(){
   $views = array();
   $current = ( !empty($_REQUEST['customvar']) ? $_REQUEST['customvar'] : 'all');

   //All link
   $class = ($current == 'all' ? ' class="current"' :'');
   $all_url = remove_query_arg('customvar');
   $views['all'] = "<a href='{$all_url }' {$class} >All</a>";

   //Foo link
   $foo_url = add_query_arg('customvar','foo');
   $class = ($current == 'foo' ? ' class="current"' :'');
   $views['foo'] = "<a href='{$foo_url}' {$class} >Foo</a>";

   //Bar link
   $bar_url = add_query_arg('customvar','bar');
   $class = ($current == 'bar' ? ' class="current"' :'');
   $views['bar'] = "<a href='{$bar_url}' {$class} >Bar</a>";

   return $views;
}

Ensuite, dans votre méthode prepare_items, vous pouvez récupérer la méthode customvar et modifier votre requête en fonction de sa valeur.

 function prepare_items(){
     //Retrieve $customvar for use in query to get items.
     $customvar = ( isset($_REQUEST['customvar']) ? $_REQUEST['customvar'] : 'all');
 }

Remarque: Les liens peuvent être utilisés pour effectuer des actions. Je voudrais stocker la valeur 'action' dans la variable de requête action (n'oubliez pas d'utiliser des nonces!). Ensuite, connectez-vous à load-{$hook} ( voir Codex ), vérifiez les autorisations et les autorisations, puis effectuez l'action.

Si vous envisagez d'inclure des "liens d'action", assurez-vous d'utiliser des nonces. Vous devez uniquement afficher le lien pour les utilisateurs disposant des fonctionnalités nécessaires.

9
Stephen Harris

Vous devez appeler views(); lors du rendu du contenu de la page.

Mettez <?php $wp_list_table->views(); ?> après le titre de la page et avant le formulaire.

Voir:\wp-admin\edit.php pour savoir quand est appelé.

1
Spyros