2016-08-09 91 views
1

Wie die meisten gelesenen Beiträge in der letzten Woche angezeigt werden?WordPress - Zeige die meisten gelesenen Beiträge in der letzten Woche

Ich habe den folgenden Code, um jeden Treffer der Beiträge zu erfassen, so würde ich wissen, wie viele Leute den Beitrag lesen.

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 View"; 
    } 
    return $count.' Views'; 
} 

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); 
    } 
} 


// Remove issues with prefetching adding extra views 
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); 
/** 
* Add a new column in the wp-admin posts list 
* 
* @param $defaults 
* 
* @return mixed 
*/ 

function subh_posts_column_views($defaults) { 
    $defaults['post_views'] = __('Views'); 
    return $defaults; 
} 

/** 
* Display the number of views for each posts 
* 
* @param $column_name 
* @param $id 
* 
* @return void simply echo out the number of views 
*/ 

function subh_posts_custom_column_views($column_name, $id) { 
    if ($column_name === 'post_views') { 
     echo getPostViews(get_the_ID()); 
    } 
} 

add_filter('manage_posts_columns', 'subh_posts_column_views'); 
add_action('manage_posts_custom_column', 'subh_posts_custom_column_views', 5, 2); 

Wie kann ich Folgendes festlegen, um die meisten gelesenen Posts in der letzten Woche anzuzeigen?

$options = array(
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'posts_per_page' => $limit, 
     'ignore_sticky_posts' => true, 
     /* 'orderby' => 'meta_value_num', */ 
     'orderby' => 'rand', 
     'order' => 'desc', 
     'meta_key' => 'post_views_count' 
    ); 

Antwort

1

Sie könnten eine 'last_view_date' Meta-Daten für jeden Eintrag in wp_postmeta Tabelle hinzufügen, ein wenig Ihre 2 erste Funktionen zu ändern, und eine bedingte Funktion erstellen, die für Beiträge true zurückgibt, die die letzte gelesen wurden Woche (in den letzten 7 Tagen).

Hier sind Ihre zwei ersten Funktionen, die ich ein wenig angepasst haben:

function getPostViews($postID){ 
    $count_key = 'post_views_count'; 
    $date_key = 'last_view_date'; 
    $today_date = date("Y-m-d"); 
    $count = get_post_meta($postID, $count_key, true); 
    if($count==''){ 
     // Note: update_post_meta() create the data if not exist 
     update_post_meta($postID, $count_key, '0'); 

     // Setting the "view date" for the first time 
     update_post_meta($postID, $date_key, $today_date); 

     return '0 View'; 
    } 
    return $count.' Views'; 
} 

function setPostViews($postID) { 
    $count_key = 'post_views_count'; 
    $date_key = 'last_view_date'; 
    $today_date = date("Y-m-d"); 
    $count = get_post_meta($postID, $count_key, true); 
    if($count==''){ 
     $count = 0; 
     // Note: update_post_meta() create the data if not exist 
     update_post_meta($postID, $count_key, '0'); 

     // Setting the "view date" for the first time 
     update_post_meta($postID, $date_key, $today_date); 

    }else{ 
     $count++; 
     update_post_meta($postID, $count_key, $count); 

     // Updating the "view date" 
     update_post_meta($postID, $date_key, $today_date); 
    } 
} 

die bedingte Funktionscode Dies ist, betrachtet Beiträge letzte Woche zu filtern:

// Conditional function that return true, whem a post have been read at least once in last week. 
function is_week_viewed($postID) { 
    $now = time(); 
    $date_key = 'last_view_date'; 
    $view_date = get_post_meta($postID, $date_key, true); 
    $viewdate = strtotime($view_date); 
    $datediff = $now - $viewdate; 
    $days = floor($datediff/(60*60*24)); 
    $count = get_post_meta($postID, $count_key, true); 
    if ($count > '0' && $days < 8) { 
     return true; 
    } 
} 

Mit diesem Material, Sie kann erreichen, die meisten gelesenen Beiträge in der letzten Woche für Ihre Suchanfrage zu zeigen ...

Dann mit is_week_viewed() bedingte Funktion können Sie jetzt Ihre Suchergebnisse filtern, um nur letzte Woche Beiträge zu erhalten.

Referenz - Die bedingte Funktion auf diesem alten Thread basiert:
Finding the number of days between two dates

+0

Ein großer Dank von mir! Es funktioniert super! Bevor ich es beantworte, möchte ich etwas auf der Live-Site überprüfen. –