J'ai ajouté la colonne personnalisée à un type de publication personnalisé, et cela fonctionne bien. Je veux juste que les noms par titre soient douloureux alors j'ai essayé ça,
function sortable_custom_columns( $columns ) {
$columns['custom_column'] = 'title';
return $columns;
}
add_filter( 'manage_edit-custom_sortable_columns', 'sortable_custom_columns' );
Cependant, cela retourne un tri très aléatoire. Je pense que cela peut avoir à voir avec le contenu de la colonne? Que je rends comme ceci;
function location_column_content( $column, $post_id ) {
switch ( $column ) {
case 'practice_name':
$location_post_meta = get_post_meta( $post_id );
$practice_post_id = $location_post_meta['practice_id'][0];
echo '<a href="' . get_edit_post_link( $practice_post_id ) . '">' . get_the_title( $practice_post_id ) . '</a>';
break;
}
}
add_action( 'manage_sf-location_posts_custom_column', 'location_column_content', 10, 2 );
Est-ce que ça a du sens? Des pensées ici? Je vous remercie
Assurez-vous de remplacer MY_POST_TYPE
, MY_CUSTOM_COLUMN
et MY_META_KEY
par les valeurs réelles.
Tout d'abord, ajoutez votre colonne personnalisée. Désactivez la date et réglez-la à nouveau pour la conserver dans la dernière colonne. Vous pouvez ignorer cette étape.
<?php
function my_manage_MY_POST_TYPE_columns( $columns )
{
// save date to the variable
$date = $columns['date'];
// unset the 'date' column
unset( $columns['date'] );
// unset any column when necessary
// unset( $columns['comments'] );
// add your column as new array element and give it table header text
$columns['MY_CUSTOM_COLUMN'] = __('Custom Column Header Text');
$columns['date'] = $date; // set the 'date' column again, after the custom column
return $columns;
}
?>
Deuxièmement, rendez votre colonne triable en utilisant le filtre manage_edit-{$post_type}_sortable_columns
(non encore documenté).
<?php
function my_set_sortable_columns( $columns )
{
$columns['MY_CUSTOM_COLUMN'] = 'MY_CUSTOM_COLUMN';
return $columns;
}
?>
Troisièmement, remplissez les cellules de la colonne.
<?php
function my_populate_custom_columns( $column, $post_id )
{
switch ( $column ) {
case 'MY_CUSTOM_COLUMN':
echo get_post_meta($post_id, 'MY_META_KEY', true);
break;
case 'MAYBE_ANOTHER_CUSTOM_COLUMN':
// additional code
break;
}
}
?>
Vous êtes maintenant prêt à trier cette colonne.
Remarque: si vous ne cochez pas meta_query
pour les valeurs vides (inexistantes), votre colonne indiquera seulement les publications ayant une méta valeur (non vide) jusqu'à ce qu'elle soit triée par une autre colonne ou par défaut
<?php
function my_sort_custom_column_query( $query )
{
$orderby = $query->get( 'orderby' );
if ( 'MY_CUSTOM_COLUMN' == $orderby ) {
$meta_query = array(
'relation' => 'OR',
array(
'key' => 'MY_META_KEY',
'compare' => 'NOT EXISTS', // see note above
),
array(
'key' => 'MY_META_KEY',
),
);
$query->set( 'meta_query', $meta_query );
$query->set( 'orderby', 'meta_value' );
}
}
?>
Et maintenant, appliquons des filtres et des actions. Vérifiez si vous n'êtes pas sur le front-end, sur la bonne page et que le bon type de message est choisi:
<?php
global $pagenow;
if ( is_admin() && 'edit.php' == $pagenow && 'MY_POST_TYPE' == $_GET['post_type'] ) {
// manage colunms
add_filter( 'manage_MY_POST_TYPE_posts_columns', 'my_manage_MY_POST_TYPE_columns' );
// make columns sortable
add_filter( 'manage_edit-MY_POST_TYPE_sortable_columns', 'my_set_sortable_columns' );
// populate column cells
add_action( 'manage_MY_POST_TYPE_posts_custom_column', 'my_populate_custom_columns', 10, 2 );
// set query to sort
add_action( 'pre_get_posts', 'my_sort_custom_column_query' );
}
?>