Tout ce que j'ai essayé jusqu'à présent n'a pas fonctionné. J'ai donc commencé à chercher partout depuis quelques jours maintenant, en essayant de comprendre comment commander des commentaires en fonction du titre du message dans lequel ils sont créés. (J'ai aussi essayé une meta_value, mais il semble que je ne l'ai pas fait correctement). J'ai lu le codex wp. Voici ce que j'essaie de faire en sorte de trier les commentaires par titre, mais il n'y a pas de paramètre title ou post_title pour la commande byby of comments. Toute aide serait appréciée.
<?php $args = array(
'status' => 'approve',
'post_status' => 'publish',
'post_type' => 'post',
'orderby' => 'title',
'order' => 'DESC'
);
$comments_query = new WP_Comment_Query; ?>
La classe WP_Comment_Query
prend en charge la commande par:
'comment_agent',
'comment_approved',
'comment_author',
'comment_author_email',
'comment_author_IP',
'comment_author_url',
'comment_content',
'comment_date',
'comment_date_gmt',
'comment_ID',
'comment_karma',
'comment_parent',
'comment_post_ID',
'comment_type',
'user_id',
'comment__in',
'meta_value',
'meta_value_num',
Il existe un moyen de l'ajuster via des filtres afin que nous puissions vous aider à commander en fonction du titre de l'article:
$args = [
'status' => 'approve',
'post_status' => 'publish',
'post_type' => 'post',
'orderby' => '_post_title', // <-- Our custom orderby value
'order' => 'DESC'
];
$comment_query = new WP_Comment_Query( $args );
Un simple plug-in de démonstration pour prendre en charge la commande _post_title
pourrait se trouver dans PHP 7:
/**
* Adjust orderby comments clause
*/
add_filter( 'comments_clauses', function( $clauses, \WP_Comment_Query $cq ) use ( &$wpdb )
{
$qv = $cq->query_vars;
$orderby = $qv['orderby'] ?? '';
$order = $qv['order'] ?? 'ASC';
if(
'_post_title' === $orderby
&& in_array( strtoupper( $order ), [ 'ASC', 'DESC' ], true )
)
$clauses[ 'orderby' ] = " {$wpdb->posts}.post_title {$order},
{$wpdb->comments}.comment_ID {$order} ";
return $clauses;
}, 10, 2 );
et ensuite pour nous assurer que la table posts est jointe à la table de commentaires, nous pouvons définir le paramètre type de post sur 'post' s'il est manquant:
/**
* Make usre we have the posts table joined by making sure the post_type isn't empty.
*/
add_action( 'pre_get_comments', function( \WP_Comment_Query $cq )
{
$qv = &$cq->query_vars;
$orderby = $qv['orderby'] ?? '';
if( '_post_title' === $orderby && empty( $qv['post_type'] ) )
$qv['post_type'] = 'post';
} );
Notez que ce type de requête:
SELECT wp_comments.comment_ID
FROM wp_comments JOIN wp_posts ON wp_posts.ID = wp_comments.comment_post_ID
WHERE ( comment_approved = '1' )
AND wp_posts.post_status IN ('publish')
AND wp_posts.post_type IN ('post')
ORDER BY wp_posts.post_title DESC, wp_comments.comment_ID DESC
n’est pas efficace car il utilise des fichiers temporaires et .
J'espère que vous pourrez l'adapter à vos besoins.