|
<?php |
|
|
|
if (!class_exists('Load_More_Posts')): |
|
/** |
|
* Load More |
|
* Uses WP pagination |
|
*/ |
|
class Load_More_Posts |
|
|
|
{ |
|
/** |
|
* hooks |
|
*/ |
|
public function __construct() |
|
{ |
|
add_action('wp_enqueue_scripts', array( |
|
$this, |
|
'enqueue_assets' |
|
)); |
|
add_action('wp_ajax_load_more_posts', array( |
|
$this, |
|
'load_more_posts' |
|
)); |
|
add_action('wp_ajax_nopriv_load_more_posts', array( |
|
$this, |
|
'load_more_posts' |
|
)); |
|
} |
|
/** |
|
* Assets |
|
*/ |
|
public function enqueue_assets() |
|
{ |
|
wp_enqueue_script('load-more-posts-js', get_template_directory_uri(). '/assets/js/load-more.js', array( |
|
'jquery' |
|
) , '0.1', true); |
|
wp_localize_script('load-more-posts-js', 'wp_ajax_url', admin_url('admin-ajax.php')); |
|
} |
|
/** |
|
* |
|
* @return void |
|
*/ |
|
public function load_more_button($context, $text, $template, $paged) |
|
{ |
|
global $wp_query; |
|
// Lets recreate the current query within our ajax call |
|
wp_localize_script('load-more-posts-js', 'load_more_data', array( |
|
'query' => $wp_query->query |
|
)); |
|
echo '<div id="load-more-posts-area-wrapper" class="grid clearfix"></div>'; |
|
wp_nonce_field('load-more-posts-nonce-' . $context, 'load-more-posts-nonce'); |
|
echo '<div class="textAligCenter clearfix">'; |
|
echo '<div id="load-more-posts-error" class="load-more-posts-error error" style="display:none;">' . esc_html__('Sem mais posts.', 'load-more-posts') . '</div>'; |
|
echo '<button id="load-more-posts" class="link_botao" data-template="' . esc_attr__($template, 'load-more-posts') . '" data-context="' . esc_attr__($context, 'load-more-posts') . '" data-paged="' . esc_attr__($paged, 'load-more-posts') . '" data-max-pages="' . $wp_query->max_num_pages . '">' . esc_html__($text, 'load-more-posts') . '</button>'; |
|
echo '</div>'; |
|
} |
|
/** |
|
* Ajax posts |
|
*/ |
|
public function load_more_posts() |
|
{ |
|
if (empty($_POST['nonce']) || empty($_POST['paged']) || !wp_verify_nonce($_POST['nonce'], 'load-more-posts-nonce-' . $_POST['context'])) { |
|
exit; |
|
} |
|
else { |
|
global $post; // required by setup post data |
|
$context = (!empty($_POST['context'])) ? sanitize_text_field($_POST['context']) : 'default'; |
|
$template = (!empty($_POST['template'])) ? sanitize_text_field($_POST['template']) : 'default'; |
|
$args = (array)$_POST['query']; |
|
$args['paged'] = sanitize_text_field($_POST['paged']); |
|
// A filter for query |
|
$args = apply_filters('load-more-posts-args-' . sanitize_text_field($_POST['context']) , $args); |
|
$query = new WP_Query($args); |
|
$posts = $query->get_posts(); |
|
foreach($posts as $post) { |
|
setup_postdata($post); |
|
get_template_part($template); |
|
wp_reset_postdata(); |
|
} |
|
} |
|
exit; |
|
} |
|
} |
|
new Load_More_Posts(); |
|
endif; |