Mostra contenuto dopo il primo e secondo paragrafo

28 nov 2012, 20:52:01
Visualizzazioni: 14.5K
Voti: 3

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.

0
Tutte le risposte alla domanda 4
7

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>";
}
28 nov 2012 21:56:42
Commenti

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°.

BobGCA2 BobGCA2
28 nov 2012 22:14:13

@Michael, vuoi usarlo su base per singolo articolo?

Max Yudin Max Yudin
28 nov 2012 22:24:53

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

BobGCA2 BobGCA2
28 nov 2012 22:29:33

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

Max Yudin Max Yudin
28 nov 2012 22:43:52

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

BobGCA2 BobGCA2
28 nov 2012 22:49:57

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

Max Yudin Max Yudin
28 nov 2012 23:18:12

Fantastico @Max Yudin. Perfetto, non ho parole per ringraziarti dell'aiuto... Grazie mille, lol.

BobGCA2 BobGCA2
28 nov 2012 23:34:14
Mostra i restanti 2 commenti
0
// 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 );
}
5 dic 2019 12:36:19
0

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.

2 ago 2015 20:39:34
0

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>";
            }
     ?>
29 gen 2019 14:34:30