Je cherche à ajouter une colonne personnalisée à une table de publication de type publication personnalisée dans le tableau de bord.
J'ai lu de nombreuses questions/réponses sur WPSE, ainsi que cet article . Bien que tout le monde semble vouloir interroger par méta clé/valeur.
J'essaie d'ajouter une valeur de taxonomie (essentiellement une catégorie) à une table de type publication personnalisée.
J'aimerais que la colonne puisse être triée, mais je ne comprends pas l'ajustement de la requête.
Ajoutez le titre de la colonne.
function mbe_column_titles($columns){
$columns['title'] = 'Frequently Asked Question';
$columns['mbe-faq-category'] = 'Category';
return $columns;
}
add_filter('manage_mbe-faqs_posts_columns', 'mbe_column_titles');
Ajoutez les valeurs de ligne.
function mbe_column_rows($column_name, $post_id){
if($column_name == 'mbe-faq-category'){
$categories = wp_get_object_terms($post_id, 'mbe-faq-categories');
$the_category = array();
if($categories){
foreach($categories as $category){
$the_category[] = $category->name;
}
}
echo join(', ', $the_category);
}
}
add_action('manage_mbe-faqs_posts_custom_column', 'mbe_column_rows', 10, 2);
Préparer la clé de commande,
function mbe_sortable_columns($columns){
$columns['mbe-faq-category'] = 'mbe-faq-category';
return $columns;
}
add_filter('manage_edit-mbe-faqs_sortable_columns', 'mbe_sortable_columns');
Je suis perplexe sur la façon de trier la colonne par la catégorie FAQ. Je suppose que ce serait une question de taxonomie. Je suis trop gêné pour même poster ma tentative, et tout ce que je fais semble échouer. Je voudrais utiliser le filtre pre_get_posts
pour gérer cela si possible.
Pour pouvoir ajouter une colonne triable personnalisée au WP_List_Table
de votre type de message dans le tableau de bord principal de l'administration WordPress, vous devez procéder comme suit:
YOUR-POST-TYPE-NAME
par votre nom de type de message réel.YOUR-TAXONOMY-NAME
par votre nom de taxonomie actuel.YOUR COLUMN NAME
par votre nom de colonne actuel.YOUR-COLUMN-SLUG
par votre slug de colonne.Ajouter des colonnes supplémentaires au tableau d'administration WordPress
if(!function_exists('mbe_change_table_column_titles')){
function mbe_change_table_column_titles($columns){
unset($columns['date']);// temporarily remove, to have custom column before date column
$columns['YOUR-COLUMN-SLUG'] = 'YOUR COLUMN NAME';
$columns['date'] = 'Date';// readd the date column
return $columns;
}
add_filter('manage_YOUR-POST-TYPE-NAME_posts_columns', 'mbe_change_table_column_titles');
}
Ajouter tous les termes de taxonomie pouvant être liés attribués sous forme de données de ligne dans une colonne de tableau d'administration WordPress personnalisée
if(!function_exists('mbe_change_column_rows')){
function mbe_change_column_rows($column_name, $post_id){
if($column_name == 'YOUR-COLUMN-SLUG'){
echo get_the_term_list($post_id, 'YOUR-TAXONOMY-NAME', '', ', ', '').PHP_EOL;
}
}
add_action('manage_YOUR-POST-TYPE-NAME_posts_custom_column', 'mbe_change_column_rows', 10, 2);
}
Activer la colonne de la table d'administration WordPress personnalisée pour devenir triable
if(!function_exists('mbe_change_sortable_columns')){
function mbe_change_sortable_columns($columns){
$columns['YOUR-COLUMN-SLUG'] = 'YOUR-COLUMN-SLUG';
return $columns;
}
add_filter('manage_edit-YOUR-POST-TYPE-NAME_sortable_columns', 'mbe_change_sortable_columns');
}
Modifier post_clauses
pour autoriser le tri des colonnes de la table d'administration WordPress personnalisées par terme de taxonomie
if(!function_exists('mbe_sort_custom_column')){
function mbe_sort_custom_column($clauses, $wp_query){
global $wpdb;
if(isset($wp_query->query['orderby']) && $wp_query->query['orderby'] == 'YOUR-COLUMN-SLUG'){
$clauses['join'] .= <<<SQL
LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
SQL;
$clauses['where'] .= "AND (taxonomy = 'YOUR-TAXONOMY-NAME' OR taxonomy IS NULL)";
$clauses['groupby'] = "object_id";
$clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC)";
if(strtoupper($wp_query->get('order')) == 'ASC'){
$clauses['orderby'] .= 'ASC';
} else{
$clauses['orderby'] .= 'DESC';
}
}
return $clauses;
}
add_filter('posts_clauses', 'mbe_sort_custom_column', 10, 2);
}
Ajuster la largeur des colonnes personnalisées du tableau d'administration WordPress
if(!function_exists('mbe_print_admin_styles')){
function mbe_print_admin_styles(){
if(!is_admin()){
return false;
}
global $pagenow;
if($pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'YOUR-POST-TYPE-NAME'){
echo '
<style type="text/css">
.column-YOUR-COLUMN-SLUG{
width: 10%;
}
</style>
'.PHP_EOL;
}
}
add_action('wp_print_scripts', 'mbe_print_admin_styles');
}
Merci à @goto10
pour demander Colonnes admin triables, lorsque les données ne proviennent pas de post_meta et @scribu
pour publication Colonnes personnalisables triables et Colonnes taxables triés pour cela répondre à la question initiale Colonne de table personnalisée triable par requête de taxonomie .