web-dev-qa-db-fra.com

Comment créer dans le panneau d'administration WordPress une colonne pouvant être triée pour le champ personnalisé, qui compte le nombre d'impressions de pages?

Bonne journée!
J'essaie de créer un compteur d'affichage pour WordPress.

Nombre de vues en sortie

function getPostViews($postID){
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
    delete_post_meta($postID, $count_key);
    add_post_meta($postID, $count_key, '0');
    return "0";    }
return $count.'';}

enregistrer la vue

function setPostViews($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
    $count = 0;
    delete_post_meta($postID, $count_key);
    add_post_meta($postID, $count_key, '0');
}else{
    $count++;
    update_post_meta($postID, $count_key, $count);    }}

nombre de vues en sortie dans le panneau d'administration

add_filter('manage_pages_columns', 'posts_column_views');
add_action('manage_pages_custom_column', 'posts_custom_column_views',10,2);
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',10,2);
function posts_column_views($defaults){
    $defaults['post_views'] = __('Views');
    return $defaults;}
function posts_custom_column_views($column_name, $id){
    if($column_name === 'post_views'){
        echo getPostViews(get_the_ID());    }}

Tout fonctionne !!!

Ajoute la possibilité de trier la colonne

add_filter('manage_edit-post_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-page_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-slides_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-hp_highlights_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-portfolio_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-staff_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-services_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-testimonials_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-faqs_sortable_columns', 'add_views_sortable_column');
function add_views_sortable_column($sortable_columns){
  $sortable_columns['post_views'] = 'views_views';
  return $sortable_columns;}

Il devient possible de trier par colonne " Vues ", en appuyant sur la chaîne se présente sous la forme: /wp-admin/edit .php? orderby = views_views & order = desc Mais en réalité, le tri n’est pas sur le champ " Views ", il est sur le champ " Date ".

Modifiez la requête de tri des colonnes pour afficher WordPress, qui nécessite un tri par champs aléatoires dont la valeur est un nombre
(Méthode 1)

add_filter('pre_get_posts', 'add_column_views_request');
function add_column_views_request( $object ){
  if( $object->get('orderby') != 'views_views' )
    return;
  $object->set('meta_key', 'post_views');
  $object->set('orderby', 'meta_value_num');}

(Méthode 2)

add_action( 'pre_get_posts', 'add_column_views_request', 1 );
function add_column_views_request( $query ) {
  if ( $query->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {
    switch( $orderby ) {
        case 'views_views':
            $query->set( 'meta_key', 'post_views' );
            $query->set( 'orderby', 'meta_value' );
        break;}}}

(Méthode 3)

add_filter('request', 'add_column_views_request');
function add_column_views_request( $vars ) {
    if ( 'views_views' == $vars['orderby'] ){
    $vars['meta_key'] = 'post_views';
    $vars['orderby'] = 'meta_value_num';}
    return $vars;}

Trier ne renvoie simplement aucun résultat: " Aucune entrée trouvée ."
Dites-moi comment corriger le code, s'il vous plaît.

Aidez-moi avec ce problème?
Merci pour votre réponse.

2
llgruff

Je devrais juste faire
Méthode 1

 $object->set('meta_key', 'post_views_count');

Méthode 2

 $query->set( 'meta_key', 'post_views_count' );

Méthode 3

 $vars['meta_key'] = 'post_views_count';
0
llgruff