Mostra contenuto dopo il primo e secondo paragrafo
La funzione seguente viene utilizzata per mostrare un determinato contenuto dopo il primo paragrafo. Vorrei mostrare 'contenuto X' dopo il 1° paragrafo e 'contenuto Y' dopo il 2° paragrafo.
<?php
$paragraphAfter = 1; //visualizza dopo il primo paragrafo
$content = apply_filters('the_content', get_the_content());
$content = explode("</p>", $content);
for ($i = 0; $i < count($content); $i++ ) {
if ($i == $paragraphAfter) { ?>
<div>Inserisci contenuto qui</div>
<?php }
echo $content[$i] . "</p>";
} ?>
Apprezzo qualsiasi aiuto.

Il mio modo per farlo (vedi aggiornamento sotto):
function addParagraphs($content) {
// puoi aggiungere quanti paragrafi vuoi:
$additions = array(
'<p>Dopo il 1° paragrafo</p>',
'<p>Dopo il 2° paragrafo</p>'
);
$content = get_the_content();
$output = ''; // definisce la variabile per evitare avvisi PHP
$parts = explode("</p>", $content);
$count = count($parts); // chiama count() solo una volta, è più veloce
for($i=0; $i<$count; $i++) {
$output .= $parts[$i] . '</p>' . $additions[$i]; // le aggiunte non esistenti non vengono concatenate
}
return $output;
}
add_filter('the_content','addParagraphs');
La risposta è stata aggiornata in base ai commenti successivi:
$paragraphAfter[1] = '<div>DOPO IL PRIMO</div>'; //mostra dopo il primo paragrafo
$paragraphAfter[3] = '<div>DOPO IL TERZO</div>'; //mostra dopo il terzo paragrafo
$paragraphAfter[5] = '<div>DOPO IL QUINTO</div>'; //mostra dopo il quinto paragrafo
$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>";
}

Grazie @Max Yudin, ma purtroppo non fa al caso mio. Vorrei mostrare, ad esempio, dopo il 1° e il 5° paragrafo, non necessariamente dopo il 1° e il 2°.

Sì @Max Yudin, voglio visualizzare contenuti dopo determinati articoli nel loop, nella home page.

@Michael, deve essere lo stesso contenuto dopo un paragrafo e lo stesso dopo altri?
E lo usi in functions.php
o nel template?

Può essere lo stesso contenuto, @Max Yudin. Attualmente sto usando il template.

@Michael, ho aggiunto un'altra versione della soluzione basata sul tuo codice da usare nel template.

// Aggiunge un filtro per inserire annunci nel contenuto del post
add_filter( 'the_content', 'prefix_insert_post_ads' );
/**
* Funzione per inserire annunci nel contenuto
* @param string $content Il contenuto originale del post
* @return string Contenuto modificato con gli annunci
*/
function prefix_insert_post_ads( $content ) {
// Codice dell'annuncio da inserire
$ad_code = '<div>Inserisci qui il codice dell\'annuncio</div>';
// Verifica se siamo in un articolo singolo e non in admin
if ( is_single() && ! is_admin() ) {
return prefix_insert_after_paragraph( $ad_code, 2, $content );
}
return $content;
}
/**
* Funzione principale che gestisce l'inserimento dopo un paragrafo specifico
* @param string $insertion Codice da inserire
* @param int $paragraph_id Numero del paragrafo dopo cui inserire
* @param string $content Contenuto originale
* @return string Contenuto modificato
*/
function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
$closing_p = '</p>';
// Divide il contenuto in paragrafi
$paragraphs = explode( $closing_p, $content );
foreach ($paragraphs as $index => $paragraph) {
// Aggiunge la chiusura del paragrafo se il paragrafo non è vuoto
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_p;
}
// Inserisce il codice dopo il paragrafo specificato
if ( $paragraph_id == $index + 1 ) {
$paragraphs[$index] .= $insertion;
}
}
// Ricompone il contenuto
return implode( '', $paragraphs );
}

Sapevo che fosse una domanda vecchia, ma questa risposta dovrebbe aiutare le persone che la stanno ancora cercando.
Questo plugin funziona perfettamente in qualsiasi tema.
https://wordpress.org/plugins/insert-post-ads
Puoi scegliere di visualizzare i tuoi annunci dopo il primo, secondo paragrafo o dove preferisci.

Cercavo un modo per effettuare chiamate get_template e qui lo condivido nel caso possa essere utile
<?php
$paragraphAfter[1] = "get_template_part( 'part-related', 'ad-first' );";
$paragraphAfter[3] = "get_template_part( 'part-related', 'ad-third' );"; //visualizza dopo il terzo paragrafo
$paragraphAfter[5] = "get_template_part( 'part-related', 'ad-fifth' );"; //visualizza dopo il quinto paragrafo
$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]); // Evalua la stringa
echo $string;
}
echo $content[$i] . "</p>";
}
?>
