WordPress: Anzahl Seitenaufrufe im Dashboard als Beitragsspalte

Bild: (c) Horst Scheuer
Bild: (c) Horst Scheuer

Ich bin schon seit ewigen Zeiten Nutzer des Plugins Statify und hatte die Idee auf Grundlage dieses Plugins die Seite „Beiträge“ im WordPress Backend um eine Spalte „Anzahl Seitenaufrufe“ zu erweitern. Herausgekommen ist nachfolgendes Snippet.

/**
 * Anzahl Seitenaufrufe unter "Beiträge" im Dashboard
 * --------------------------------------------------
 */
 
function get_views_of_post_from_statify( $link ) {
  global $wpdb;
  
  $results = $wpdb->get_results(
    $wpdb->prepare( 
      "SELECT COUNT(`target`) as `count` FROM `$wpdb->statify` WHERE `target` = %s", $link
    ),
    OBJECT
  );
  return $results[0]->count;
}

function add_postviews_column( $columns ) {
  $new_columns = array( 'postviews' =>  __( '<span class="postviews-bubble" title="Aufrufe"> <span class="screen-reader-text">Aufrufe</span></span>' ),  );
  return array_merge( $columns, $new_columns );
}
add_filter( 'manage_posts_columns', 'add_postviews_column', 5 );

function display_postviews_column( $column_name ) {
  switch( $column_name ) {
    case 'postviews':
    echo get_views_of_post_from_statify( str_replace( home_url(), '', get_permalink() ) );
  }
}
add_action( 'manage_posts_custom_column', 'display_postviews_column', 5, 2 );

Die Funktion ermittelt die Anzahl Seitenaufrufe aus der Datenbanktabelle wp_statify, die vom Plugin Statify angelegt wird und erzeugt eine neue Spalte auf der Seite „Beiträge“. Meine Funktion überprüft nicht, ob das Plugin installiert, oder die Datenbanktabelle vorhanden ist.

Damit die erzeugte Spalte optisch zum Rest passt wird noch nachfolgendes CSS benötigt.

/**
 * Anzahl Seitenaufrufe unter "Beiträge" im Dashboard
 * --------------------------------------------------
 */

.fixed .column-postviews {
  width: 3.5em;
  padding: 8px 8px;
  text-align: right;
}

th .postviews-bubble:before {
  content: "\f185";
  font: normal 20px/.5 dashicons;
  speak: never;
  display: inline-block;
  padding: 0;
  top: 4px;
  left: 4px;
  position: relative;
  vertical-align: top;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-decoration: none!important;
  color: #3c434a;
}

@media screen and (max-width: 782px) {
  .fixed .column-postviews {
    text-align: left;
  }  
} 

Hinweis: So ein ähnliches Snippet hatte ich schon mal veröffentlicht. Das jetzt veröffentlichte ist eine verbesserte Version.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.