Mostrar contenido después del primer y segundo párrafo

28 nov 2012, 20:52:01
Vistas: 14.5K
Votos: 3

La función que aparece a continuación se utiliza para mostrar cierto contenido después del primer párrafo. Me gustaría mostrar 'contenido X' después del 1er párrafo y 'contenido Y' después del 2do párrafo.

<?php
$paragraphAfter1 = 1; //mostrar después del primer párrafo
$paragraphAfter2 = 2; //mostrar después del segundo párrafo
$content = apply_filters('the_content', get_the_content());
$content = explode("</p>", $content);
for ($i = 0; $i <count($content); $i++ ) {
    if ($i == $paragraphAfter1) { ?>

<div>Insertar contenido X aquí</div>

<?php }
    if ($i == $paragraphAfter2) { ?>

<div>Insertar contenido Y aquí</div>

<?php }
echo $content[$i] . "</p>";
} ?>

Agradezco cualquier ayuda.

0
Todas las respuestas a la pregunta 4
7

Mi forma de hacer esto (ver actualización abajo):

function addParagraphs($content) {
    // puedes agregar tantos como quieras:
    $additions = array(
        '<p>Después del 1er párrafo</p>',
        '<p>Después del 2do párrafo</p>'
    );

    $content = get_the_content();

    $output = ''; // definir variable para evitar advertencias de PHP

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

    $count = count($parts); // llamar count() solo una vez, es más rápido

    for($i=0; $i<$count; $i++) {
        $output .= $parts[$i] . '</p>' . $additions[$i]; // adiciones inexistentes no se concatenan
    }
    return $output;

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

La respuesta se actualizó según comentarios posteriores:

$paragraphAfter[1] = '<div>DESPUÉS DEL PRIMERO</div>'; //mostrar después del primer párrafo
$paragraphAfter[3] = '<div>DESPUÉS DEL TERCERO</div>'; //mostrar después del tercer párrafo
$paragraphAfter[5] = '<div>DESPUÉS DEL QUINTO</div>'; //mostrar después del quinto párrafo

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

Gracias @Max Yudin, pero desafortunadamente no me sirve. Me gustaría mostrar, por ejemplo, después del 1er y 5to párrafo, no necesariamente después del 1ro y 2do.

BobGCA2 BobGCA2
28 nov 2012 22:14:13

@Michael, ¿quieres usarlo por cada publicación?

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

Sí @Max Yudin, quiero mostrar contenidos después de ciertas publicaciones en el loop, en la página de inicio.

BobGCA2 BobGCA2
28 nov 2012 22:29:33

@Michael, ¿tiene que ser el mismo contenido después de un párrafo y el mismo después de otro(s)?
¿Y lo usas en functions.php o en la plantilla?

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

Puede ser el mismo contenido, @Max Yudin. Actualmente estoy usando la plantilla.

BobGCA2 BobGCA2
28 nov 2012 22:49:57

@Michael, añadí una versión más de solución basada en tu código para usar en la plantilla.

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

Excelente @Max Yudin. Perfecto, no tengo palabras para agradecerte la ayuda... Gracias, jaja.

BobGCA2 BobGCA2
28 nov 2012 23:34:14
Mostrar los 2 comentarios restantes
0
add_filter( 'the_content', 'prefix_insert_post_ads' );

function prefix_insert_post_ads( $content ) {

    $ad_code = '<div>Código de publicidad aquí</div>';

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

    return $content;
}

// Función principal que hace que la magia suceda

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 dic 2019 12:36:19
0

Sabía que es una pregunta antigua, pero esta respuesta debería ayudar a las personas que todavía la están buscando.

Este plugin funciona perfectamente en cualquier tema.

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

Puedes elegir el primero, el segundo o el que prefieras para mostrar tus anuncios.

2 ago 2015 20:39:34
0

Estaba buscando una forma de hacer llamadas get_template y aquí lo comparto por si resulta útil

<?php 
            $paragraphAfter[1] = "get_template_part( 'part-related', 'ad-first' );";
            $paragraphAfter[3] = "get_template_part( 'part-related', 'ad-third' );"; //mostrar después del quinto párrafo
            $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]); // Evaluar string
                    echo $string;
                }
                echo $content[$i] . "</p>";
            }
     ?>
29 ene 2019 14:34:30