La fonction ci-dessous permet d’afficher certains contenus après le premier paragraphe. Je voudrais montrer "contenu X" après le premier paragraphe et "contenu Y" après le deuxième paragraphe.
<?php
$paragraphAfter= 1; //display after the first paragraph
$content = apply_filters('the_content', get_the_content());
$content = explode("</p>", $content);
for ($i = 0; $i <count($content); $i++ ) {
if ($i == $paragraphAfter) { ?>
<div>Insert content here</div>
<?php }
echo $content[$i] . "</p>";
} ?>
J'apprécie toute aide.
Ma façon de faire cela ( voir la mise à jour ci-dessous ):
function addParagraphs($content) {
// you can add as many as you want:
$additions = array(
'<p>After 1st paragraph</p>',
'<p>After 2nd paragraph</p>'
);
$content = get_the_content();
$output = ''; // define variable to avoid PHP warnings
$parts = explode("</p>", $content);
$count = count($parts); // call count() only once, it's faster
for($i=0; $i<$count; $i++) {
$output .= $parts[$i] . '</p>' . $additions[$i]; // non-existent additions does not concatenate
}
return $output;
}
add_filter('the_content','addParagraphs');
La réponse est mise à jour en fonction des commentaires suivants :
$paragraphAfter[1] = '<div>AFTER FIRST</div>'; //display after the first paragraph
$paragraphAfter[3] = '<div>AFTER THIRD</div>'; //display after the third paragraph
$paragraphAfter[5] = '<div>AFTER FIFtH</div>'; //display after the fifth paragraph
$content = apply_filters( 'the_content', get_the_content() );
$content = explode("</p>", $content);
$count = count($content);
for ($i = 0; $i < $count; $i++ ) {
if ( array_key_exists($i, $paragraphAfter) ) {
echo $paragraphAfter[$i];
}
echo $content[$i] . "</p>";
}
Je savais que c'était une vieille question mais cette réponse devrait aider les gens qui la recherchent encore.
Ce plugin fonctionne parfaitement dans n'importe quel thème.
https://wordpress.org/plugins/insert-post-ads
Vous pouvez choisir d'abord/seconde ou ce que vous voulez pour afficher vos annonces.
Je cherchais un moyen de passer des appels à get_template et je le partage ici au cas où il serait utile
<?php
$paragraphAfter[1] = "get_template_part( 'part-related', 'ad-first' );";
$paragraphAfter[3] = "get_template_part( 'part-related', 'ad-third' );"; //display after the fifth paragraph
$paragraphAfter[5] = "get_template_part( 'part-related', 'ad-fifth' );";
$content = apply_filters( 'the_content', get_the_content() );
$content = explode("</p>", $content);
$count = count($content);
for ($i = 0; $i < $count; $i++ ) {
if ( array_key_exists($i, $paragraphAfter) ) {
$string = eval($paragraphAfter[$i]); // Eval string
echo $string;
}
echo $content[$i] . "</p>";
}
?>