J'ai un champ personnalisé appelé post_views_count qui stocke les vues de chaque message sur mon blog. J'aimerais utiliser ces vues pour décider à quelle catégorie appartiennent les messages. Voici ce que je voudrais arriver:
Cela devrait donner lieu à 1 grand poste, 4 ou 5 moyens et 4 ou 5 petits postes par groupe. Ce processus s’exécuterait toutes les heures sur un cron pour actualiser les catégories et s’exécuter à chaque nouvelle publication. Lorsqu'un message quitte les 50 derniers messages, il ne reste que la catégorie à laquelle il a été attribué.
J'ai cherché des solutions similaires et je n'ai pas trouvé grand chose. Toute aide serait très appréciée.
J'ai pris la liberté d'ignorer les étapes 1 et 3, car elles semblent faire partie de votre approche principale pour atteindre votre objectif et ne pas être votre objectif lui-même. Je crois que vous pouvez atteindre votre objectif d'une manière plus simple.
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++;
}
}
Maintenant, en tant que tâche CRON, pour actualiser les catégories de vos dernières publications toutes les heures sans exécuter de nouvelle requête, vous pouvez procéder de la manière suivante:.
add_action( 'hourly_process', 'assign_last_posts_cat_by_views', 10, 2 );
wp_schedule_event( time(), 'hourly', 'hourly_process', array( 50, false ) );
Et pour lancer le processus quand un message est sauvegardé ...
add_action( 'save_post', 'assign_last_posts_cat_by_views' );