[ show_post post_type='post' category='' tag='' post_pp='4' button_text='View Post' load_more='true' ]
This code copy and past it in functions.php file.
or create a new file and put this code in this file and include in functions.php file.//custom code here function custom_enqueue_styles() { wp_enqueue_script('jquery'); wp_enqueue_style('bootstrap-css', 'https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css'); wp_enqueue_script('custom-load-more', get_template_directory_uri() . 'load-more.js', array('jquery'), null, true); wp_localize_script('custom-load-more', 'ajax_params', array( 'ajax_url' => admin_url('admin-ajax.php') )); } add_action('wp_enqueue_scripts', 'custom_enqueue_styles'); function custom_show_post_shortcode($atts) { // Define default attributes $atts = shortcode_atts( array( 'post_type' => 'post', 'category' => '', 'tag' => '', 'post_pp' => '4', // Default posts per page 'button_text' => 'Read more', 'load_more'=>true ), $atts, 'show_post' ); $show_loadmore = $atts['load_more']; // Arguments for WP_Query $args = array( 'post_type' => $atts['post_type'], 'posts_per_page' => $atts['post_pp'], 'category_name' => $atts['category'], 'tag' => $atts['tag'], 'post_status' => 'publish', 'paged' => 1 ); // Custom WP_Query $query = new WP_Query($args); // Start output buffering ob_start(); if ($query->have_posts()) { echo '<div class="row" id="post-grid">';// Start Bootstrap row while ($query->have_posts()) : $query->the_post(); ?> <div class="col-md-6 col-lg-3 mb-4"> <div class="card" style='min-height: 100%;'> <?php if (has_post_thumbnail()) : ?> <img src="<?php the_post_thumbnail_url('medium'); ?>" class="card-img-top" alt="<?php the_title(); ?>"> <?php else: echo "<img src='https://developers.elementor.com/docs/assets/img/elementor-placeholder-image.png' class='card-img-top' alt=''/>"; endif; ?> <div class="card-body"> <h5 class="card-title"><?php the_title(); ?></h5> <div class="card-meta"> <small class="text-muted"><?php the_time('F j, Y'); ?> | <?php the_author(); ?></small> </div> <p class="card-text"><?php echo wp_trim_words(get_the_excerpt(),15); ?></p> <a href="<?php the_permalink(); ?>" class="btn btn-primary"><?php echo esc_html($atts['button_text']); ?></a> </div> </div> </div> <?php endwhile; echo '</div>'; // End Bootstrap row if ($query->max_num_pages > 1 && $show_loadmore) { echo '<div class="text-center"><button id="load-more" class="btn btn-secondary" data-page="1" data-max="' . $query->max_num_pages . '" data-atts=\'' . json_encode($atts) . '\'>Load More</button> </div>'; } wp_reset_postdata(); } else { echo '<p>No posts found.</p>'; } // Return the output return ob_get_clean(); } // Register the shortcode add_shortcode('show_post', 'custom_show_post_shortcode'); function custom_load_more_posts() { // Get current page $paged = isset($_POST['page']) ? $_POST['page'] : 1; $atts = isset($_POST['atts']) ?$_POST['atts']: array(); $args = array( 'post_type' => $atts['post_type'], 'posts_per_page' => $atts['post_pp'], 'category_name' => $atts['category'], 'tag' => $atts['tag'], 'post_status' => 'publish', 'paged' => $paged ); // Decode shortcode attributes from data-atts $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) : $query->the_post(); ?> <div class="col-md-6 col-lg-3 mb-4 post-item"> <div class="card"> <?php if (has_post_thumbnail()) : ?> <img src="<?php the_post_thumbnail_url('medium'); ?>" class="card-img-top" alt="<?php the_title(); ?>"> <?php endif; ?> <div class="card-body"> <h5 class="card-title"><?php the_title(); ?></h5> <p class="card-meta"> <small class="text-muted"><?php the_time('F j, Y'); ?> | <?php the_author(); ?></small> </p> <p class="card-text"><?php echo wp_trim_words(get_the_excerpt(), 20); ?></p> <a href="<?php the_permalink(); ?>" class="btn btn-primary"><?php echo esc_html($atts['button_text']); ?></a> </div> </div> </div> <?php endwhile; } wp_reset_postdata(); die(); // Stop execution } add_action('wp_ajax_load_more', 'custom_load_more_posts'); add_action('wp_ajax_nopriv_load_more', 'custom_load_more_posts');
JavaScript and shortcode
You can put your shortcode and javascript in template or on html widget.
like this --
[show_post post_type='post' category='' tag='' post_pp='4' button_text='View Post' load_more='true']
< script> jQuery(document).ready(function($) { $('#load-more').on('click', function() { var button = $(this); var page = button.data('page'); var maxPages = button.data('max'); var atts = button.data('atts'); page++; // Make AJAX request $.ajax({ url: ajax_params.ajax_url, type: 'POST', data: { action: 'load_more', page: page, atts: atts }, beforeSend: function() { button.text('Loading...'); // Change button text }, success: function(response) { $('#post-grid').append(response); // Append new posts button.data('page', page); // Check if we've reached max number of pages if (page >= maxPages) { button.remove(); // Remove button if no more pages } else { button.text('Load More'); } } }); }); }); </script>
1 Comments
update this wp query where category -
ReplyDelete'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'shirts')
)
)