Maison  >  Article  >  développement back-end  >  Astuce : activer les colonnes personnalisées triables

Astuce : activer les colonnes personnalisées triables

WBOY
WBOYoriginal
2023-09-01 17:45:13546parcourir

Astuce : activer les colonnes personnalisées triables

Dans un article récent de Claudio Simeone, il a montré comment ajouter des colonnes supplémentaires à une publication, ou personnaliser le type de publication, l'écran d'administration (ou en supprimer un existant). Dans cette astuce rapide, je vais m'appuyer sur cela et vous montrer comment rendre triable une colonne nouvellement créée.


Pour indiquer à WordPress quelles colonnes vous souhaitez enregistrer comme triables, vous avez besoin de ce filtre :

manage_{$screen->id}_sortable_column

Pour les articles et les pages, $screen->id sont respectivement "edit-post" et "edit-page". De manière générale, pour un type de publication nommé "my-post-type", il s'agit de "edit-my-post-type".

Le filtre reçoit un tableau avec les noms des colonnes triables comme clés et le tri comme valeurs. Plus précisément, ces valeurs indiquent que le paramètre "orderby" est défini dans la requête qui remplit la table. De la même manière que vous supprimez une colonne, vous pouvez également rendre une colonne « non triable » en la supprimant de ce tableau. Voyons un exemple :


Chronique d'inscription

Selon l'article de Claudio, en supposant que nous ayons ajouté la colonne "Tranche" au type de message "Gâteau", nous pouvons faire ce qui suit :

add_filter('manage_edit-cake_columns', 'my_extra_cake_columns');
function my_extra_cake_columns($columns) {
	$columns['slices'] =__('Slices','myplugindomain');
	return $columns;
}

Nous avons ajouté ce qui suit à la colonne :

add_action( 'manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2 );
function my_cake_column_content( $column_name, $post_id ) {
	if ( 'slices' != $column_name )
		return;
	//Get number of slices from post meta
	$slices = get_post_meta($post_id, 'slices', true);
	echo intval($slices);
}

J'ai stocké les tranches sous forme de métadonnées, mais vos colonnes peuvent être remplies par d'autres données.


Rendre les colonnes triables

Maintenant, nous enregistrons la colonne personnalisée comme "triable". Comme mentionné ci-dessus, nous utilisons le filtre manage_{$screen->id}_sortable_column. Le manage_{$screen->id}_sortable_column 过滤器。本例中的 $screen->id dans ce cas est "edit-cake".

add_filter( 'manage_edit-cake_sortable_columns', 'my_sortable_cake_column' );
function my_sortable_cake_column( $columns ) {
	$columns['slices'] = 'slice';

	//To make a column 'un-sortable' remove it from the array
	//unset($columns['date']);

	return $columns;
}
Les clés du tableau

$columns représentent des colonnes triables, et leurs valeurs indiquent à WordPress sur quoi définir « $columns 数组的键表示可排序列,其值告诉 WordPress 在查询中将 'orderby' 设置为什么。如果该值是 WordPress 本身理解的 'orderby 之一(这些值包括 'title'、'date'、'modified'、'comment_count',或者确实是下面列出的任何其他值WordPress Codex 中的 WP_Query)我们可以到此为止。此规则的例外情况(如本例所示)是 'meta_value' 和 'meta_value_num » dans les requêtes. Si la valeur est l'une des '

' que WordPress lui-même comprend (ces valeurs incluent 'title', 'date', 'modified ', ' comment_count', ou bien toute autre valeur listée ci-dessous pour WP_Query dans le Codex WordPress) On peut s'arrêter là. Les exceptions à cette règle (comme indiqué dans cet exemple) sont les paramètres 'meta_value' et 'meta_value_num', qui nous obligent également à définir une méta-clé.

pre_get_posts 操作。这传递了一个我们可以修改的查询对象。请注意,所有默认查询(正面和背面)都会触发此操作。虽然它不太可能引起任何问题,但除非您希望 WordPress 在前端也将 orderbySi nous voulons trier par méta-valeur, ou par tout autre moyen que WordPress ne comprend pas automatiquement, vous devez lui indiquer ce que signifie le tri par « tranche ». Si vous commandez via post meta, le moyen le plus simple est de vous connecter à l'action pre_get_posts. Cela transmet un objet de requête que nous pouvons modifier. Notez que toutes les requêtes par défaut (recto et verso) déclenchent cette action. Bien qu'il soit peu probable que cela pose des problèmes, il est préférable d'affecter uniquement les requêtes du côté administrateur, à moins que vous ne souhaitiez que WordPress définisse également

sur « tranches » sur le front-end.

add_action( 'pre_get_posts', 'my_slice_orderby' );
function my_slice_orderby( $query ) {
	if( ! is_admin() )
		return;

	$orderby = $query->get( 'orderby');

	if( 'slice' == $orderby ) {
		$query->set('meta_key','slices');
		$query->set('orderby','meta_value_num');
	}
}
meta_value' 而不是 'meta_value_numCela vérifie si notre requête est triée par « tranche » et si c'est le cas, il indique à WordPress de trier numériquement par la valeur de la méta de publication « tranche ». Si vous souhaitez trier les valeurs par ordre alphabétique, utilisez '

'.

$query 是一个 WP_Query 对象,因此您可以使用该对象对任何内容进行排序,您也可以对列进行排序。对于其他更复杂的事情,您需要挂钩 posts_orderby (或 post_clauses

) crochet, mais cela dépasse le cadre de ce petit conseil.

Remarque :

Si une publication ne stocke pas de valeur pour cette clé méta, la publication n'apparaîtra pas lorsque vous trierez par cette clé méta. Ceci est différent des publications qui stockent 0 comme méta-valeur. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn