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:
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.
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' );