Pasa las variables de shortcode a la plantilla

2

Lo que quiero lograr

Tengo una plantilla de página personalizada y me gustaría mostrar algunas publicaciones seleccionadas en esa página. Estoy desarrollando esta característica con shortcode . Por ahora, solo necesito recibir los ID de publicación en la plantilla de página.

Lo que he probado

En functions.php :

function post_link_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'id' => '',
        ),
        $atts,
        'featured_posts'
    );
}
add_shortcode('featured_posts', 'post_link_shortcode');

En el editor de páginas del panel de administración que he agregado:

Here are the featured posts: [featured_posts id="358,328"]

En la plantilla de página:

the_content();
echo do_shortcode("[featured_posts]");

Lo que espero

Produce Here are the featured posts: 358,328 en la página junto con el contenido normal. Pero no lo hace. ¿Alguna idea?

    
pregunta Stickers 11.08.2018 - 21:21

1 respuesta

4

No puedes simplemente pegar un shortcode en alguna parte y esperar que haga algo. Básicamente, es un búfer que tomará el código que se le indique generar, lo compilará exactamente de la forma en que se lo indica y luego lo imprimirá en cualquier lugar donde se coloque el código abreviado.

Eche un vistazo a la API de código corto para obtener más información.

En cuanto a su ejemplo específico, en realidad no tiene nada en su código abreviado que diga " haga algo con las publicaciones 358 y 328".

Necesitará usar algo como WP_Query() o get_posts() dentro de tu shortcode. También puede considerar usar un nombre más exclusivo para su función y código abreviado que post_link_shortcode y featured_posts para evitar conflictos de nombres.

Toma esto por ejemplo:

add_shortcode( 'stickers_featured_posts', 'stickers_featured_posts_function');
function stickers_featured_posts_function( $atts ){
    extract( shortcode_atts( array(
        'ids'   => '',
    ), $atts ) );

    // Remove whitespace from IDs
    // ex: '123, 321' => '123,321'
    $ids = preg_replace('/\s+/', '', $ids);

    // Turn string of ID's into array
    // ex: '123,321' => array(123, 321);
    $id_array = explode( ',', $ids );

    $args = array(
        'post__in' => $id_array
    );

    $featured_query = new WP_Query( $args );
    if( $featured_query->have_posts() ){
        echo '<ul>';
        while( $featured_query->have_posts() ){
            $featured_query->the_post();
            echo '<li>' . get_the_title() . '</li>';
        }
        echo '</ul>';
        wp_reset_postdata();
    } else {
        echo 'Post IDs not found';
    }
}

Y el uso sería como [stickers_featured_posts ids="123,321"] - La salida final sería cualquier cosa que pongas en el bucle while , en el caso de - una simple lista de títulos de publicaciones.

    
respondido por el Xhynk 12.08.2018 - 00:31

Lea otras preguntas en las etiquetas