Abrufen, wie viele Beiträge pro Monat für ein Dashboard-Widget angezeigt werden

Ich versuche, ein Dashboard-Widget zu entwickeln, das Beiträge zählt oder nach Monat sortiert. Ich bin mir wirklich nicht sicher, wie ich das machen soll.

Ich weiß, wie man ein Dashboard-Widget erstellt und all das mit Post-Zählungen, Post-Typ-Zählungen.

Ich habe sogar eine benutzerdefinierte, die die neuesten Post-Typen, die ich habe, auflistet. Aber ich muss noch einen erstellen, indem ich nur zähle, wie viele Posts oder Post-Typen es in einem Monat gibt, und ich bin mir einfach nicht sicher, wie ich das machen soll.

Irgendwelche Ideen und Hilfe dazu wären großartig. Vielen Dank. 🙂

Ich möchte, dass es in etwa so aussieht:

So möchte ich aussehen.

Dies ist ein Update mit dem folgenden Skript. Aber ich kann es nicht zur Arbeit bringen.

add_action('wp_dashboard_setup', 'dashboard_test'); function dashboard_test() { global $wp_meta_boxes; wp_add_dashboard_widget('month_dashboard', 'Reports Submitted for the Year', 'custom_test'); } function custom_test() { global $wpdb; $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'report' ORDER BY post_date DESC"); foreach($years as $year) $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'report' AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC"); foreach($months as $month) if ($month get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'report' AND MONTH(post_date)= '".$month."' AND YEAR(post_date) = '".$year."' ORDER BY post_date ASC"); echo '

'; echo '
  • ' . date( 'F', mktime(0, 0, 0, $month) ). ' (' . count($theids) . ')
  • ' ; echo '

    '; }

    Ich erhalte diesen Fehler: Rufen Sie eine Member-function get_col () auf einem Nicht-Objekt in /var/www/vhosts/hibsterlite.com/httpdocs/wp-content/themes/hibsterlite/functions.php in Zeile 209 auf

    Ok Ich bekomme den Fehler oben nicht mehr aber ich bekomme nur einen Monat in der Liste. Irgendwelche Ideen Jungs? 🙂

    Solutions Collecting From Web of "Abrufen, wie viele Beiträge pro Monat für ein Dashboard-Widget angezeigt werden"

    Ging einfach über Ihren Code und es sieht gut aus, aber Sie fehlen die Code-Blöcke für Ihre foreach-Schleifen, also:

     add_action('wp_dashboard_setup', 'dashboard_test'); function dashboard_test() { global $wp_meta_boxes; wp_add_dashboard_widget('month_dashboard', 'Reports Submitted for the Year', 'custom_test'); } function custom_test(){ global $wpdb; $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'report' ORDER BY post_date DESC"); foreach($years as $year){ $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'report' AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC"); foreach($months as $month) { $month = ($month < 10)? '0' . $month : $month; $theids = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'report' AND MONTH(post_date)= '".$month."' AND YEAR(post_date) = '".$year."' ORDER BY post_date ASC"); echo '

    '; echo '
  • ' . date( 'F', mktime(0, 0, 0, $month) ). ' (' . count($theids) . ')
  • ' ; echo '

    '; } } }

    und es funktioniert gut:

    Bildbeschreibung hier eingeben

    Ich habe etwas Ähnliches für ein benutzerdefiniertes Post-Archiv implementiert, weil mir die Handhabung von wp_get_archives nicht gefallen hat. Im Grunde habe ich eine benutzerdefinierte SQL-Abfrage für alle Posts in einem Jahr erstellt, dann diese Monat für Monat abgebrochen und dann jeden Monat die Anzahl der Posts gezählt.

     
      < ?php $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'mediaposts' ORDER BY post_date DESC"); foreach($years as $year) : $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'mediaposts' AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC"); foreach($months as $month) : if ($month < 10) { $month = '0' . $month; } $theids = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'mediaposts' AND MONTH(post_date)= '".$month."' AND YEAR(post_date) = '".$year."' ORDER BY post_date ASC"); ?>

      < ?php echo '
    • ' . date( 'F', mktime(0, 0, 0, $month) ). ' (' . count($theids) . ')' ; ?>
    • < ?php endforeach;?> < ?php endforeach; ?>

    Das ist das Endergebnis:

    Benutzerdefiniertes Abfrage-Endergebnis

    Ich würde mehr PHP als SQL verwenden. Auf diese Weise müssen Sie nur einmal auf die database für Ihre Posts zugreifen.

    Fügen Sie ein neues WordPress-Dashboard-Widget hinzu.

     /* Add a Dashboard widget for reports submitted. */ function mbe_add_dashboard_widget(){ wp_add_dashboard_widget('mbe_dashboard_widget_reports', 'Reports Submitted', 'mbe_dashboard_widget_reports'); } add_action('wp_dashboard_setup', 'mbe_add_dashboard_widget'); 

    Richten Sie das aktuelle WordPress Dashboard-Widget für alle übermittelten Berichte ein.

     /* Reports Submitted Widget. */ function mbe_dashboard_widget_reports(){ $data = mbe_get_reports(); if($data){ echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL;// Yearly echo ''.PHP_EOL;// Monthly echo ''.PHP_EOL;// Daily echo ''.PHP_EOL; echo '
    Reports by YearReports by MonthReports by Day
    '.mbe_reports_by('year', $data).''.mbe_reports_by('month', $data).''.mbe_reports_by('day', $data).'
    '.PHP_EOL; } }

    Die Hauptfunktion zum Abrufen Ihrer WordPress-Post-Ausgangsdaten für die eingereichten Berichte.

     /* Get all reports. */ function mbe_get_reports(){ global $wpdb; /* Prevent typos later on. */ $post_type = 'report'; $post_status = 'publish'; $posts = $wpdb->get_results($wpdb->prepare( " SELECT ID, post_title, post_date FROM {$wpdb->posts} WHERE `post_status` = '%s' AND `post_type` = '%s' ", $post_status, $post_type )); /* No posts. */ if(empty($posts)){ return false; } $post_data = array(); // Store data for later. for($i = 0; $i < count($posts); $i++){ $post = $posts[$i]; /* Separate the date from the time. */ $post_date = explode(' ', $post->post_date); /* Separate the day, month, and year from each other. */ $the_date = explode('-', $post_date[0]); $month = date('F', mktime(0, 0, 0, $the_date[1])); $day = date('l', mktime(0, 0, 0, $the_date[2])); /* Store post data nested in the format: year, month, day. */ $post_data[$the_date[0]][$month][$day][] = array( 'post_id' => $post->ID, 'post_title' => $post->post_title, 'post_slug' => sanitize_title($post->post_title), 'post_permalink' => get_permalink($post->ID), 'post_type' => $post_type, 'post_status' => $post_status, 'post_date' => date('l, F d, Y', strtotime(join('-', $the_date))),// Ex. Saturday, October 06, 2012 'post_time' => date('g:i A', strtotime($post_date[1]))// Ex. 3:00 PM ); } /* Done with $posts, remove it. */ unset($posts); /* Return the data. */ if(!empty($post_data)){ $return = $post_data; } else{ $return = false; } return $return; } 

    Sortieren Sie Ihre Berichte nach Jahr, Monat und Tag und zeigen Sie sie dann in einer ungeordneten Liste in der Tabelle Ihres WordPress Dashboard-Widgets an.

     /* Display report counts by year, month, or day. */ function mbe_reports_by($span, $data){ $post_data = array(); foreach($data as $year => $year_data){ foreach($year_data as $month => $month_data){ foreach($month_data as $day => $day_data){ for($i = 0; $i < count($day_data); $i++){ $post = $day_data[$i]; if($span == 'year'){ $post_data[$year][] = $post; } elseif($span == 'month'){ $post_data[$month][] = $post; } elseif($span == 'day'){ $post_data[$day][] = $post; } } } } } if(!empty($post_data)){ $content = ''; $content .= '
      '.PHP_EOL; uksort($post_data, 'mbe_date_sort'); foreach($post_data as $time_span => $posts){ $content .= '
    • '.$time_span.' ('.count($posts).')
    • '.PHP_EOL; } $content .= ''.PHP_EOL; $return = $content; } else{ $content = '

      No reports found.

      '.PHP_EOL; } return $content; }

    Anstatt Daten in zufälliger Reihenfolge durcheinander zu bringen, sollten sie sortiert werden. Wir können die Daten nicht einfach in auf- oder absteigender Reihenfolge sortieren, sondern müssen sie in chronologischer Reihenfolge sortieren.

     /* Sort dates chronologically. */ function mbe_date_sort($a, $b){ if($a == $b){ return 0; } else{ $a = strtotime($a); $b = strtotime($b); if($a < $b){ return -1; } else{ return 1; } } } 

    Wenn Sie alle Ihre Zählungen per Hyperlink verknüpfen möchten, um alle Beiträge dieses Jahres, Monats oder Tages aufzulisten, rate ich Ihnen, Ihrem benutzerdefinierten benutzerdefinierten Berichtstyp drei benutzerdefinierte Taxonomien hinzuzufügen.

    Sie benötigen eine benutzerdefinierte Taxonomie für "Berichte nach Jahr", "Berichte nach Monat" und "Berichte nach Tag", und sie müssen an Ihren benutzerdefinierten Beitragstyp "Bericht" angehängt werden. Sie können dies mit register_taxonomy();

    Sie müssten dann jede Ihrer neu erstellten Taxonomien mit Begriffen füllen. Jeder Begriff würde seine jeweilige Taxonomie widerspiegeln.

    • Die benutzerdefinierte Taxonomie "reports_by_year" muss Begriffe für jedes Jahr enthalten, für das ein Bericht erstellt wurde (z. B. 2009, 2010, 2011, 2012).
    • Die benutzerdefinierte Taxonomie "reports_by_month" muss für jeden Monat eines Jahres Begriffe enthalten (z. B. Januar bis Dezember).
    • Die benutzerdefinierte Taxonomie "reports_by_day" muss Begriffe für jeden Tag einer Woche enthalten (z. B. Sonntag bis Samstag).

    Jedes Mal, wenn ein Bericht generiert wird, müssen automatisch die richtigen Bedingungen in jeder benutzerdefinierten Taxonomie festgelegt werden. Dies könnte mit wp_set_object_terms(); und den save_post . Erfahren Sie mehr über WordPress-Aktionen .

    Sobald dies erledigt ist, können Sie dies als Hyperlink für die Anzahl der Berichte verwenden.

    • Link zu Berichten aus diesem Jahr:
      admin_url('/edit.php?reports_by_year='.$time_span.'&post_type=report&orderby=title&order=asc', 'http');
    • Link zu Berichten aus diesem Monat:
      admin_url('/edit.php?reports_by_month='.$time_span.'&post_type=report&orderby=title&order=asc', 'http');
    • Link zu Berichten von diesem Tag:
      admin_url('/edit.php?reports_by_day='.$time_span.'&post_type=report&orderby=title&order=asc', 'http');

    Wenn Sie also auf die Anzahl der Berichte klicken, gelangen Sie zu einer Tabelle, die nur die Berichte enthält, die für dieses Jahr, diesen Monat oder diesen Tag generiert wurden. Sie werden in aufsteigender Reihenfolge nach dem Titel des Berichts sortiert.