Lors de la modification de l'un de mes types de publication personnalisé, je souhaite pouvoir répertorier toutes les entrées selon un champ personnalisé au lieu de la date à laquelle elles sont publiées (ce qui, pour un type de publication personnalisé, n'est probablement pas pertinent). Les commentaires d'un article de blog sur les types d'articles personnalisés ont suscité l'intérêt des auteurs. L'auteur m'a dit que c'était possible et qu'il l'a même fait afin que vous puissiez cliquer sur les noms des colonnes pour un tri personnalisé. Il a mentionné la posts_orderby
fonction que j'avais notée dans mes propres commentaires, mais je peux maintenant retrouver le blog. Aucune suggestion? J'ai vu une solution qui utilisait
add_action('wp', 'check_page');
Et la check_page
fonction utilisée add_filter
pour changer la requête mais je suis à peu près sûr que cela ne fonctionnerait que dans les fichiers de thème, pas dans la zone d'administration.
la source
Réponses:
Comme vous pouvez probablement l'imaginer par le manque de réponses fournies, la solution n'est pas vraiment triviale. Ce que j’ai fait est de créer un exemple assez autonome qui suppose un type de publication personnalisé de "
movie
" et une clé de champ personnalisée de " Genre ".Avertissement : cela fonctionne avec WP3.0 mais je ne peux pas être sûr que cela fonctionnera avec les versions précédentes.
En gros, vous devez accrocher deux (2) crochets pour que cela fonctionne et deux autres (2) pour le rendre évident et utile.
Le premier point d'accroche est '
restrict_manage_posts
', ce qui vous permet d'émettre un code HTML<select>
dans la zone située au-dessus de la liste des publications où les filtres " Actions globales " et " Afficher les dates ". Le code fourni générera la fonctionnalité " Tri par: " comme indiqué dans cet extrait d'écran:(source: mikeschinkel.com )
Le code utilise le SQL direct car il n’existe pas de fonction API WordPress pour fournir la liste de toutes les méta_keys pour un type de publication (cela ressemble à un futur ticket de trac pour moi ...). Quoi qu’il en soit, voici le code. Notez qu’il saisit le type de message
$_GET
et le valide pour s’assurer qu’il s’agit à la fois d’un type de message validepost_type_exists()
et d’unmovie
type de message (ces deux vérifications sont excessives, mais j’ai fait cela pour vous montrer comment, si vous ne voulez pas forcer.) code le type de post.) Enfin, j'utilise lesortby
paramètre URL car il n’est en conflit avec rien d’autre dans WordPress:La deuxième étape requise consiste à utiliser le
parse_query
hook appelé après que WordPress ait décidé quelle requête devrait être exécutée, mais avant de l'exécuter. Nous arrivons ici à définir les valeurs deorderby
etmeta_key
dans lequery_var
tableau de la requête qui sont documentées dans le Codex dans leorderby
paramètre forquery_posts()
. Nous testons pour nous assurer que:is_admin()
),$pagenow=='edit.php'
),post_type
paramètre d'URL égal àmovie
, etsortby
paramètre d'URL et la valeur " Aucune " n'a pas été transmise .Si tous ces tests réussissent, nous définissons le
query_vars
(comme indiqué ici ) surmeta_value
et notresortby
valeur pour ' Genre ':Et c'est tout ce que vous devez faire. pas de crochets "
posts_order
" ou "wp
" requis! Bien sûr, vous devez en faire plus. vous devez ajouter sur votre page des colonnes qui répertorient les publications pour que vous puissiez réellement voir les valeurs qu’elle trie, sans quoi les utilisateurs perdraient leur confusion. Alors ajoutez unmanage_{$post_type}_posts_columns
crochet, dans ce casmanage_movie_posts_columns
. Ce hook reçoit le tableau de colonnes par défaut et, pour des raisons de simplicité, je viens de le remplacer par deux colonnes standard; une case à cocher (cb
) et un nom de poste (title
). (Vous pouvez inspecterposts_columns
avec aprint_r()
pour voir ce qui est disponible par défaut.)J'ai décidé d'ajouter un " Tri par: " pour quand il y a un
sortby
paramètre d'URL et quand il ne l'est pasNone
:Enfin, nous utilisons le
manage_pages_custom_column
crochet pour afficher la valeur s’il existe une publication du type de publication approprié et avec le test probablement redondant pouris_admin()
et$pagenow=='edit.php'
. Lorsqu'il existe unsortby
paramètre d'URL, nous extrayons la valeur du champ personnalisé en cours de tri en la affichant dans notre liste. Voici à quoi ça ressemble (rappelez-vous, ce sont des données de test, donc pas de commentaire de la galerie Peanut sur les classifications de films! :):(source: mikeschinkel.com )
Et voici le code:
Notez que cela ne prend que le premier " Genre " pour un
movie
, c'est-à-dire la première méta_value dans le cas de valeurs multiples pour une clé donnée. Mais là encore, je ne suis pas sûr de savoir comment cela fonctionnerait autrement!Et pour ceux qui ne savent pas où placer ce code, vous pouvez le mettre dans un plugin ou plus vraisemblablement pour le novice dans le
functions.php
fichier de votre thème actuel.Comment cela aide.
la source
'months_dropdown_results'
et'restrict_manage_posts'
. PS Les votes positifs sont toujours appréciés. :)À partir de WordPress 3.1 (j'utilise la version bêta), les colonnes peuvent maintenant être triées via leurs titres.
L'article suivant détaille comment les implémenter.
http://scribu.net/wordpress/custom-sortable-columns.html
la source
Voici une solution simple:
Il suffit de remplacer VOTRE TYPE DE POSTE et 'your_custom_field'
la source