J'aimerais ajouter un article (appartenant à une catégorie spécifique) entre les articles de la boucle WordPress (tels que "Sponsors"). Exemple:
P P P S
P P S P
P S P P
Comment puis-je atteindre cet objectif? Je suis un débutant avec le codage, donc je ne sais pas assez pour modifier une boucle par moi-même. Des Ninjas de Codage en Boucle qui peuvent fournir une solution?
Notez que ci-dessous est ma boucle actuelle. Il est utilisé pour trier les messages par prix ou par ordre aléatoire:
index.php
<?php while (have_posts() ) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); the_meta ();
endwhile;
previous_posts_link();
next_posts_link();
?>
functions.php
function my_custom_query($query){
if ( $query->is_home() && $query->is_main_query() ) {
$sort= $_GET['sort'];
if($sort == "A"){
$query->set( 'orderby', 'Rand' );
$query->set( 'posts_per_page', '2' );
}
if($sort == "B"){
$query->set( 'meta_key', 'price' );
$query->set( 'orderby', 'meta_value_num' );
$query->set( 'order', 'DESC' );
$query->set( 'posts_per_page', '2' );
}
}
}
add_action( 'pre_get_posts', 'my_custom_query' );
Edit: Mise à jour
Le plugin de Birgire fonctionne! Au début, j'avais des problèmes pour que le plugin fonctionne sur mon thème. Le problème était ce morceau de code que j'utilise dans la boucle dans index.php (je l'utilise pour appeler le champ personnalisé à apparaître).
<?php
global $wp_query;
$postid = $wp_query->post->ID;
echo get_post_meta($postid, 'price', true);
wp_reset_query();
?>
Voici une idée basée sur ma réponse pour la question: Comment afficher un nombre Y de messages personnalisés après chaque X messages normaux?
J'espère que je l'ai rendu un peu plus utile ici sur Github , mais il pourrait être affiné beaucoup plus (travail futur).
La classe SponsorPostsInjector
vous aidera à injecter automatiquement les messages sponsor dans le thème à l’aide des filtres the_post
, loop_start
et loop_end
.
Activez le plug-in et ajoutez l'exemple suivant à votre fichier functions.php
pour démarrer les injections:
/**
* Inject a sponsor post after the first post on the home page,
* and then again for every third post within the main query.
*/
add_action( 'wp', 'my_sponsor_injections' );
function my_sponsor_injections()
{
if( ! class_exists( 'SponsorPostsInjector' ) ) return;
// We want the sponsor posts injections only on the home page:
if( ! is_home() ) return;
// Setup the injection:
$injector = new SponsorPostsInjector(
array(
'items_before_each_inject' => 3,
'items_per_inject' => 1,
'template_part' => 'content-sponsor',
)
);
// Setup the injection query:
$injector->query(
array(
'post_type' => 'sponsor',
'tax_query' => array(
array(
'taxonomy' => 'country',
'terms' => 'sweden',
'field' => 'slug',
)
)
)
);
// Inject:
$injector->inject();
}
où nous avons créé le fichier modèle content-sponsor.php
dans notre répertoire de thèmes actuel, afin de contrôler la mise en page des publications de sponsors injectées.
L'idée est que cela devrait également prendre en charge la pagination.
J'espère que vous pourrez adapter cela à vos besoins.