Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function my_load_more_scripts() {
- global $wp_query;
- // Na maioria dos casos, ele já está incluído na página e esta linha pode ser removida
- wp_enqueue_script('jquery');
- // registra nosso script principal, mas ainda não o enfileiramos
- wp_register_script( 'my_loadmore', get_stylesheet_directory_uri() . '/myloadmore.js', array('jquery') );
- // temos que passar parâmetros para o script myloadmore.js, mas podemos obter os valores dos parâmetros apenas no PHP
- // você pode definir variáveis diretamente no seu HTML, mas eu decidi que a maneira mais adequada é wp_localize_script
- wp_localize_script( 'my_loadmore', 'loadmore_params', array(
- 'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php', // WordPress AJAX
- 'posts' => json_encode( $wp_query->query_vars ), // tudo sobre seu loop está aqui
- 'current_page' => get_query_var( 'paged' ) ? get_query_var('paged') : 1,
- 'max_page' => $wp_query->max_num_pages
- ) );
- wp_enqueue_script( 'my_loadmore' );
- }
- add_action( 'wp_enqueue_scripts', 'my_load_more_scripts' );
- function loadmore_ajax_handler(){
- // prepara nossos argumentos para a consulta
- $args = json_decode( stripslashes( $_POST['query'] ), true );
- $args['paged'] = $_POST['page'] + 1; // precisamos que a próxima página seja carregada
- $args['post_status'] = 'publish';
- // é sempre melhor usar WP_Query, mas não aqui
- query_posts( $args );
- if( have_posts() ) :
- // executa o loop
- while( have_posts() ): the_post();
- // analise o código do seu tema como as postagens são inseridas, mas você pode usar seu próprio HTML, é claro
- //get_template_part( 'template-parts/post/content', get_post_format() );
- // for the test purposes comment the line above and uncomment the below one
- the_title();
- endwhile;
- endif;
- die; // here we exit the script and even no wp_reset_query() required!
- }
- add_action('wp_ajax_loadmore', 'loadmore_ajax_handler'); // wp_ajax_{action}
- add_action('wp_ajax_nopriv_loadmore', 'loadmore_ajax_handler'); // wp_ajax_nopriv_{action}
- <!-------------------------------------------------------------------------------------------------------------------------------->
- <script>
- jQuery(function($){ // use o código jQuery dentro disso para evitar o erro "$ is not defined"
- $('.loadmore').click(function(){
- var button = $(this),
- data = {
- 'action': 'loadmore',
- 'query': loadmore_params.posts, // é assim que obtemos os parâmetros da função
- 'page' : loadmore_params.current_page
- };
- $.ajax({ // você também pode usar $ .post aqui
- url : loadmore_params.ajaxurl, // AJAX Manipulador
- data : data,
- type : 'POST',
- beforeSend : function ( xhr ) {
- button.text('Carregando...'); // altera o texto do botão, você também pode adicionar uma imagem do pré-carregado
- },
- success : function( data ){
- if( data ) {
- button.text( 'Carregar Mais' ).prev().before(data); // insere novas postagens
- loadmore_params.current_page++;
- if ( loadmore_params.current_page == loadmore_params.max_page )
- button.remove(); // se última página, remova o botão
- } else {
- button.remove(); // se não houver dados, remova o botão também
- }
- }
- });
- });
- });
- </script>
Advertisement
Add Comment
Please, Sign In to add comment