Ändern Sie die Postkategorie basierend auf den letzten Postsichten

Ich habe ein benutzerdefiniertes Feld namens post_views_count, das die Ansichten jedes Beitrags in meinem Blog speichert. Ich möchte diese Ansichten verwenden, um zu entscheiden, zu welcher Kategorie die Beiträge gehören. Hier ist, was ich gerne geschehen würde:

  1. Schreibe die letzten 50 Beiträge in 10er Gruppen.
  2. Finde heraus, welcher Beitrag in jeder Gruppe die höchsten Aufrufe hat und verschiebe sie in die große Kategorie.
  3. Finde den Durchschnitt der verbleibenden 9 Beiträge in jeder Gruppe.
  4. Beiträge, die unter dem Durchschnitt jeder Gruppe liegen, werden in die kleine Kategorie verschoben und Beiträge über dem Durchschnitt werden in die mittlere Kategorie verschoben.

Dies sollte zu 1 großen Post, 4 oder 5 mittleren und 4 oder 5 kleinen Posts pro Gruppe führen. Dieser process würde stündlich auf einem Cron laufen, um die Kategorien zu aktualisieren und jedes Mal, wenn ein neuer Post erstellt wird, ausgeführt zu werden. Wenn ein Beitrag die letzten 50 verlässt, bleibt er nur die Kategorie, der er zuletzt zugewiesen wurde.

Ich habe nach ähnlichen Lösungen gesucht und kann nicht viel finden. Jede Hilfe würde sehr geschätzt werden.

Solutions Collecting From Web of "Ändern Sie die Postkategorie basierend auf den letzten Postsichten"

Ich habe mir die Freiheit genommen, Schritt 1 und Schritt 3 zu ignorieren, da sie Teil Ihres primären Ansatzes zu sein scheinen, Ihr Ziel zu erreichen und nicht selbst Ihr Ziel zu sein. Ich glaube, dass Sie Ihr Ziel einfacher erreichen können.

function assign_last_posts_cat_by_views( $posts_number = 50, $delete_last_posts_transient = true ) { if ( true === $delete_last_posts_transient ) { delete_transient( 'last_posts' ); } if ( ! $posts = get_transient( 'last_posts' ) ) { $args = array( 'numberposts' => $posts_number ); $posts = get_posts( $args ); // Gets your posts... set_transient( 'last_posts', $posts, 60*60*24 ); // Caches the result... } $post_views = array(); foreach ( $posts as $post ) { $post_views[ $post->ID ] = get_post_meta( $post->ID, 'post_views_count', true ); // Gets each post views count... } arsort( $post_views, SORT_NUMERIC ); // Sorts views in desc order... $post_number = 0; foreach ( $post_views as $post_id => $views ) { if ( $post_number < 5 ) { $term_slug = 'large'; } elseif ( $post_number < 30 ) { $term_slug = 'medium'; } else { $term_slug = 'small'; } $term = get_term_by( 'slug', $term_slug, 'category' ); // Gets term and caches it... wp_set_post_terms( $post_id, array( $term->term_id ), 'category' ); // Programatically assignes the category to the post... $post_number++; } } 

Als CRON-Job können Sie jetzt die Kategorien Ihrer letzten Posts jede Stunde aktualisieren, ohne eine neue Post-Abfrage auszuführen. Sie können so etwas tun …

 add_action( 'hourly_process', 'assign_last_posts_cat_by_views', 10, 2 ); wp_schedule_event( time(), 'hourly', 'hourly_process', array( 50, false ) ); 

Und um den process auszuführen, wenn ein Beitrag gespeichert wird …

 add_action( 'save_post', 'assign_last_posts_cat_by_views' );