Afisează conținut după primul și al doilea paragraf

28 nov. 2012, 20:52:01
Vizualizări: 14.5K
Voturi: 3

Funcția de mai jos este folosită pentru a afișa un anumit conținut după primul paragraf. Aș dori să afișez 'conținut X' după primul paragraf și 'conținut Y' după al doilea paragraf.

<?php
$paragraphAfter1 = 1; //afișează după primul paragraf
$paragraphAfter2 = 2; //afișează după al doilea paragraf
$content = apply_filters('the_content', get_the_content());
$content = explode("</p>", $content);
for ($i = 0; $i < count($content); $i++) {
    echo $content[$i] . "</p>";
    if ($i == $paragraphAfter1) { ?>
        <div>Conținut X aici</div>
    <?php }
    if ($i == $paragraphAfter2) { ?>
        <div>Conținut Y aici</div>
    <?php }
} ?>

Apreciez orice ajutor.

0
Toate răspunsurile la întrebare 4
7

Modul meu de a face acest lucru (vezi actualizarea de mai jos):

function addParagraphs($content) {
    // poți adăuga câte dorești:
    $additions = array(
        '<p>După primul paragraf</p>',
        '<p>După al doilea paragraf</p>'
    );

    $content = get_the_content();

    $output = ''; // definește variabilă pentru a evita avertismentele PHP

    $parts = explode("</p>", $content);

    $count = count($parts); // apelează count() o singură dată, este mai rapid

    for($i=0; $i<$count; $i++) {
        $output .= $parts[$i] . '</p>' . $additions[$i]; // adăugările inexistente nu se concatenează
    }
    return $output;

}
add_filter('the_content','addParagraphs');

Răspunsul este actualizat conform comentariilor ulterioare:

$paragraphAfter[1] = '<div>DUPĂ PRIMUL</div>'; //afișează după primul paragraf
$paragraphAfter[3] = '<div>DUPĂ AL TREILEA</div>'; //afișează după al treilea paragraf
$paragraphAfter[5] = '<div>DUPĂ AL CINCILEA</div>'; //afișează după al cincilea paragraf

$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
Comentarii

Mulțumesc @Max Yudin, dar din păcate nu mi-a fost de ajutor. Aș dori să afișez, de exemplu, după primul și al cincilea paragraf, nu neapărat după primul și al doilea.

BobGCA2 BobGCA2
28 nov. 2012 22:14:13

@Michael, vrei să folosești asta pe baza fiecărui post în parte?

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

Da @Max Yudin, vreau să afișez conținut după anumite postări în loop, pe pagina principală.

BobGCA2 BobGCA2
28 nov. 2012 22:29:33

@Michael, trebuie să fie același conținut după un paragraf și același după altul?
Și îl folosești în functions.php sau în template?

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

Poate fi același conținut, @Max Yudin. Momentan folosesc template-ul.

BobGCA2 BobGCA2
28 nov. 2012 22:49:57

@Michael, am adăugat încă o versiune de soluție bazată pe codul tău pentru a folosi în template.

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

Excelent @Max Yudin. Perfect, nu am cuvinte să-ți mulțumesc pentru ajutor... Mulțumesc, lol.

BobGCA2 BobGCA2
28 nov. 2012 23:34:14
Arată celelalte 2 comentarii
0
add_filter( 'the_content', 'prefix_insert_post_ads' );

function prefix_insert_post_ads( $content ) {

    $ad_code = '<div>Codul pentru reclame se introduce aici</div>';

    if ( is_single() && ! is_admin() ) {
        return prefix_insert_after_paragraph( $ad_code, 2, $content );
    }

    return $content;
}

// Funcția părinte care face magia să se întâmple

function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
    $closing_p = '</p>';
    $paragraphs = explode( $closing_p, $content );
    foreach ($paragraphs as $index => $paragraph) {

        if ( trim( $paragraph ) ) {
            $paragraphs[$index] .= $closing_p;
        }

        if ( $paragraph_id == $index + 1 ) {
            $paragraphs[$index] .= $insertion;
        }
    }

    return implode( '', $paragraphs );
}
5 dec. 2019 12:36:19
0

Știam că este o întrebare veche, dar acest răspuns ar trebui să ajute persoanele care încă o caută.

Acest plugin funcționează perfect în orice temă.

https://wordpress.org/plugins/insert-post-ads

Puteți alege prima/a doua sau orice altă poziție doriți pentru afișarea anunțurilor.

2 aug. 2015 20:39:34
0

Căutam o modalitate de a face apeluri get_template și o împărtășesc aici în caz că este utilă

<?php 
            $paragraphAfter[1] = "get_template_part( 'part-related', 'ad-first' );";
            $paragraphAfter[3] = "get_template_part( 'part-related', 'ad-third' );"; //afișează după al treilea paragraf
            $paragraphAfter[5] = "get_template_part( 'part-related', 'ad-fifth' );"; //afișează după al cincilea paragraf


            $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]); // Evaluează stringul
                    echo $string;
                }
                echo $content[$i] . "</p>";
            }
     ?>
29 ian. 2019 14:34:30