Cómo pasar el shortcode de WordPress con parámetros a la plantilla

2 minutos de lectura

Tengo una plantilla con un tema secundario y edito la función de plantilla infantil.php

El objetivo es crear un código corto que tendrá parámetros y parte del archivo de plantilla

mi función se ve así:

function my_shortcode($atts = array() ) {
    extract(shortcode_atts(array(
        'catid' => '5'
    ), $atts));
    ob_start();
   include(get_template_part('mynews-temp'));
    return ob_get_clean();
}
add_shortcode('mynews', 'my_shortcode');

[mynews catid="5"] la salida del código corto debe ser una consulta de noticias con cat id 5

esta es una parte de la plantilla con consulta

<?phpif ( ! defined( 'ABSPATH' ) ) {exit( 'Direct script access denied.' );}
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'mynews',
'tax_query' => array(
array(
'taxonomy' => 'newstypes',
'field' => 'tag_ID',
'terms' => array('$catid')
),),));
if( $posts ): ?>
<?php foreach( $posts as $post ):
setup_postdata( $post );?>
<a href="https://stackoverflow.com/questions/53376768/<?php%20the_permalink();%20?>"><?php the_title(); ?></a><
<?php endforeach; ?>
<?php endif;    wp_reset_postdata(); ?>

No funciona no puedo encontrar lo que es error

PD, la bruja es correcta cuando uso una plantilla infantil:

 include(get_template_part('mynews-temp'));
 or  include(locate_template('mynews-temp'));

Puede incluir las partes de la plantilla de esta manera: get_template_part('mynews-temp'). No hay necesidad de includeeso no hace nada.

El resto de tu código funciona perfectamente. Lo único que podría recomendar es simplificar su código y simplemente obtener todos los posts para ver si el problema está en el tax_query:

<?php
if ( ! defined( 'ABSPATH' ) ) {exit( 'Direct script access denied.' );}
$posts = get_posts(array(
    'posts_per_page' => -1,
    'post_type' => 'post',
    
));
//     'tax_query' => array(
//         array(
//             'taxonomy' => 'newstypes',
//             'field' => 'tag_ID',
//             'terms' => array('$catid')
//         ),),));
if( $posts ): ?>
<?php foreach( $posts as $post ):
setup_postdata( $post );?>
<a href="<?php%20the_permalink();%20?>"><?php the_title(); ?></a><
<?php endforeach; ?>
<?php endif;    wp_reset_postdata(); ?>

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad