web-dev-qa-db-fra.com

Créer un nom cliquable dans WP_List_Table for Plugin Admin

J'ai développé un plugin où je voulais créer une table, stylée et fonctionnant exactement comme les tables Post/Page natives de Wordpress.

En suivant le guide ci-dessous, j'ai pu créer la table et charger ma base de données. La seule chose que je n'arrive pas à comprendre, c'est comment rendre le contenu de la ligne "cliquable".

http://wpengineer.com/2426/wp_list_table-a-step-by-step-guide/

IE - rendant la colonne "name" cliquable. J'ai les boutons "modifier, supprimer" sous le nom, mais cela ne suffit pas.

Tout conseil serait grandement apprécié. J'ai regardé un autre plugin pour voir comment ils l'avaient fait, et il semblait qu'ils avaient cassé la table et codé en dur le html de la table. J'espère ne pas avoir à faire ça.

MODIFIER:

clickable, linked, name

Le nom de l'article, Hello world !, comme vous pouvez le constater, est un lien/cliquable.

SOLUTION

pour que cela fonctionne, je devais supprimer mes fonctions de colonne personnalisées, qui incluaient mes actions de ligne. Il s'avère que vous pouvez simplement appeler les actions de ligne div! Voici la fonction qui m'a aidé, grâce au Milo.

function single_row_columns($item) {
       list($columns, $hidden) = $this->get_column_info();
            foreach ($columns as $column_name => $column_display_name) {
                   $class = "class='$column_name column-$column_name'";

                   $style = '';
                   if (in_array($column_name, $hidden))
                         $style = ' style="display:none;"';

                   $attributes = "$class$style";

                   if ('cb' == $column_name) {
                   echo  "<td $attributes>";
                   echo '<input type="checkbox" name="id[]" value="%s" />', $item['ID'];
                   echo "</td>";
                        }
               elseif ('galname' == $column_name) {
               echo "<td $attributes>";
               echo '<a href="#">', $item['galname'];
               echo "</a>";

                   echo "<div class='row-actions'><span class='edit'>";
           echo sprintf('<a href="?page=%s&action=%s&gid=%s">Edit</a>',$_REQUEST['page'],'edit',$item['id']);
                   echo "</span> | <span class='trash'>";
           echo sprintf('<a href="?page=%s&action=%s&gid=%s">Delete</a>',$_REQUEST['page'],'delete',$item['id']);
           echo "</span></div></td>";
                                                    }
            else {
                echo "<td $attributes>";
                echo $this->column_default( $item, $column_name );
                echo "</td>";
            } } } 

Merci beaucoup! Jacob

3
Jacob Raccuia

Le WP_List_Table class utilise finalement la méthode single_row_columns pour sortir chaque cellule du tableau. Si nous regardons cette méthode, nous verrons cette partie:

...
elseif ( method_exists( $this, 'column_' . $column_name ) ) {
    echo "<td $attributes>";
    echo call_user_func( array( &$this, 'column_' . $column_name ), $item );
    echo "</td>";
}
...

Ajoutez une méthode à votre classe pour la colonne à laquelle vous souhaitez ajouter une fonctionnalité/mise en forme supplémentaire et nommez-la 'column_' . $column_name, puis générez tout balisage supplémentaire dont vous avez besoin pour encapsuler le contenu de l'élément.

2
Milo

Si vous parlez de la fonctionnalité "Modification rapide" des tableaux de commentaires et de contributions: Je travaille sur un didacticiel pour cette fonctionnalité, mais il faudra un certain temps pour trouver une solution facile à comprendre. Comme vous l'avez peut-être deviné, il s'agit d'un mélange de PHP, jQuery et Ajax.

J'ai cherché sur le Net des astuces sur la manière d'implémenter la fonctionnalité, mais le seul exemple disponible est la source du noyau WordPress.

0
Latz