An example of how to create a WordPress shortcode to display a custom template with custom attributes to pass on the template.
Code is added in the functions.php file
This example displays all the CPT testimonials with a custom Heading
The shortcode to use is [ display_testimonials ]
with a custom attribute use [ display_testimonials heading=”Custom Text”]
function template_part_shortcode($atts) { $atts = shortcode_atts( array( 'heading' => '', ), $atts, 'display_testimonials' ); ob_start(); get_template_part( 'partials/testimonials', null , array('data' => array('heading' => $atts['heading']))); return ob_get_clean(); } add_shortcode( 'display_testimonials', 'template_part_shortcode' );
On the testimonials.php file the codes is added
<?php $args = wp_parse_args( $args, $array_defaults ); $blog_posts_query = new WP_Query([ 'post_type' => 'testimonials', 'posts_per_page' => -1, 'orderby' => 'date', 'order' => 'ASC' ]); ?> <!-- The Modal --> <div id="testimonials_section"> <div class="container"> <?php if(!empty($args['data']['heading'])): ?> <div class="row"> <div class="col-12"> <h3 class="bp-title"><strong><?php echo esc_html($args['data']['heading']); ?></strong></h3> </div> </div> <?php endif; ?> <?php if ($blog_posts_query->have_posts()): ?> <div class="row"> <?php while ($blog_posts_query->have_posts()): ?> <?php $blog_posts_query->the_post(); ?> <div class="col-4"> <!--<h3><?php echo get_the_title() ?></h3>--> <?php the_content(); ?> </div> <?php endwhile; ?> </div> <?php endif; ?> </div> </div> <?php wp_reset_query(); ?>