it-swarm.com.de

Bestellung nach Beitragsansichten

Ich möchte eine Filterliste für meine Beiträge erstellen (auf der Startseite, der Suchseite und der Archivseite). Hier ist ein Beispiel für das, wonach ich suche

Sortieren nach: - Datum (/? Orderby = Datum) - Zufall (/? Orderby = Rand) - Ansichten (hier brauche ich ein orderby = Ansichten oder ähnliches)

Ich zähle und betrachte Post Views mit diesem Code:

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

// Show views
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';
}

// Show views in WP-Admin
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views', 5, 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());
  }
}

Ist das möglich?

2
Hank Scorpio

Sie können Ihre Abfrage nach Ansichtsnummer sortieren, indem Sie den Metaschlüssel verwenden:

$query = new WP_Query( 
            array( 
                'meta_key' => 'post_views_count',
                'orderby' => 'meta_value_num',
                'order' => 'DESC',
            ) 
        );

Dadurch werden Ihre Beiträge basierend auf den Ansichten abgefragt. Sie können DESC in ASC oder Rand ändern, um das zu erreichen, was Sie gefragt haben.

Damit es funktioniert, können Sie Ihre Abfrage mit pre_get_posts() filtern. Verwenden Sie diesen Artikelcode in der functions.php-Datei Ihres Themas:

add_action( 'pre_get_posts', 'my_view_filter' );
function my_view_filter($query){
    if ( 
        !is_admin() && 
        $query->is_main_query() && 
        ( $query->is_home() || $query->is_archive() || $query->is_search() )
    ) {
        if (isset($_REQUEST['orderby'])) {
            $order = $_REQUEST['orderby'];
        }
        if ( $order === 'views') {
            $query->set('meta_key', 'post_views_count');
            $query->set('orderby', 'meta_value_num');
            $query->set('order', 'DESC');
        }
    }
}

Wenn Sie jetzt http://example.com/?orderby=views besuchen, werden Ihre Beiträge nach der Anzahl der Aufrufe gefiltert (absteigend, Sie können sie beliebig ändern).

2
Jack Johansson