Paginazione quando si usa wp_query?
<!-- query -->
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$query = new WP_Query( array(
'category_name' => 'investor-news',
'posts_per_page' => 2,
'paged' => $paged
) );
?>
<?php if ( $query->have_posts() ) : ?>
<!-- inizia il loop -->
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>" title="Leggi"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php echo get_the_date(); ?>
<?php endwhile; ?>
<!-- fine del loop -->
<!-- COSA VA QUI?????? -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e( 'Spiacenti, nessun post corrisponde ai criteri.' ); ?></p>
<?php endif; ?>
Ho provato di tutto per ottenere la paginazione su questa pagina statica utilizzando la funzione wp_query ma senza successo. C'è un commento in questo script chiamato COSA VA QUI?????... quindi cosa va inserito in quel punto?
Questo codice si trova in una pagina statica che non è né la pagina principale né la pagina dei post.

Sostituisci <!-- WHAT GOES HERE?????? -->
con il codice di paginazione qui sotto:
<div class="pagination">
<?php
echo paginate_links( array(
'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
'total' => $query->max_num_pages,
'current' => max( 1, get_query_var( 'paged' ) ),
'format' => '?paged=%#%',
'show_all' => false,
'type' => 'plain',
'end_size' => 2,
'mid_size' => 1,
'prev_next' => true,
'prev_text' => sprintf( '<i></i> %1$s', __( 'Post più recenti', 'text-domain' ) ),
'next_text' => sprintf( '%1$s <i></i>', __( 'Post più vecchi', 'text-domain' ) ),
'add_args' => false,
'add_fragment' => '',
) );
?>
</div>
WordPress include una comoda funzione chiamata paginate_links()
che fa il lavoro pesante. Nell'esempio sopra, l'oggetto WP_Query personalizzato $query
viene utilizzato al posto dell'oggetto globale $wp_query
.
Modifica:
In risposta al commento di @mark-in-motion, ecco un esempio di funzione wrapper per paginate_links()
che ho creato tempo fa. Puoi aggiungerla al file functions.php
del tuo tema, poi chiamare echo my_pagination();
nel tuo template per visualizzare la paginazione.
/**
* Paginazione numerica tramite la funzione core di WP paginate_links().
* @link http://codex.wordpress.org/Function_Reference/paginate_links
*
* @param array $args
*
* @return string HTML per la paginazione numerica
*/
function my_pagination( $args = array() ) {
global $wp_query;
$output = '';
if ( $wp_query->max_num_pages <= 1 ) {
return;
}
$pagination_args = array(
'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
'total' => $wp_query->max_num_pages,
'current' => max( 1, get_query_var( 'paged' ) ),
'format' => '?paged=%#%',
'show_all' => false,
'type' => 'plain',
'end_size' => 2,
'mid_size' => 1,
'prev_next' => true,
//'prev_text' => __( '« Prec', 'text-domain' ),
//'next_text' => __( 'Succ »', 'text-domain' ),
//'prev_text' => __( '‹ Prec', 'text-domain' ),
//'next_text' => __( 'Succ ›', 'text-domain' ),
'prev_text' => sprintf( '<i></i> %1$s',
apply_filters( 'my_pagination_page_numbers_previous_text',
__( 'Post più recenti', 'text-domain' ) )
),
'next_text' => sprintf( '%1$s <i></i>',
apply_filters( 'my_pagination_page_numbers_next_text',
__( 'Post più vecchi', 'text-domain' ) )
),
'add_args' => false,
'add_fragment' => '',
// Argomenti personalizzati non parte del core di WP:
'show_page_position' => false, // Consente opzionalmente di visualizzare l'HTML "Pagina X di XX".
);
$pagination_args = apply_filters( 'my_pagination_args', array_merge( $pagination_args, $args ), $pagination_args );
$output .= paginate_links( $pagination_args );
// Opzionalmente, mostra Pagina X di XX.
if ( true == $pagination_args['show_page_position'] && $wp_query->max_num_pages > 0 ) {
$output .= '<span class="page-of-pages">' .
sprintf( __( 'Pagina %1s di %2s', 'text-domain' ), $pagination_args['current'], $wp_query->max_num_pages ) .
'</span>';
}
return $output;
}

Penso di essere in ritardo. ma la domanda è.. perché dovrei scrivere 999999999?

Questo è un trucco per ottenere i risultati di get_pagenum_link()
con %#%
invece del numero di pagina (999999999).

C'è un modo per inserire questo in functions.php in modo da dover solo chiamare pageinate_links()
e non l'intera cosa?

Questo codice è per la Paginazione Personalizzata delle Query. Puoi seguire i passaggi per creare la tua paginazione in WordPress.
<?php
/**
* Template Name: Pagina Personalizzata
*/
get_header(); ?>
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 4,
'paged' => $paged
);
$custom_query = new WP_Query( $args );
?>
<!----inizio-------->
<div class="wrap">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
while($custom_query->have_posts()) :
$custom_query->the_post();
?>
<div>
<ul>
<li>
<h3><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></h3>
<div>
<ul>
<div><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('thumbnail'); ?></a></div>
</ul>
<ul>
<p><?php echo the_content(); ?></p>
</ul>
</div>
<div>
</li>
</ul>
</div> <!-- fine articoli blog -->
<?php endwhile; ?>
<?php if (function_exists("pagination")) {
pagination($custom_query->max_num_pages);
} ?>
</main><!-- #main -->
</div><!-- #primary -->
</div><!-- .wrap -->
<!----fine-------->
<?php get_footer();
Riferimento: https://www.wpblog.com/use-wp_query-to-create-pagination/

Sembra che la funzione pagination non esista, per favore assistimi

@KarueBensonKarue questo perché l'autore di questa risposta ha copiato e incollato qualcosa da un altro sito, e tu hai copiato e incollato da questo sito
Se vai alla fonte https://wpblog.com/use-wp_query-to-create-pagination/ vedrai come spiegano di definire la funzione pagination()

Se qualcuno arriva qui cercando di creare una wp_query con paginazione all'interno di uno shortcode:
add_shortcode('wp_query_pagination_inside_shortcode', 'my_shortcode_function_tag');
if (!function_exists('my_shortcode_function_tag')) {
function my_shortcode_function_tag($atts)
{
ob_start(); // Attiva il buffer di output
global $paged;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$atts = shortcode_atts(
array(
'post_type' => 'post',
// qualsiasi parametro desideri
),
$atts
);
$args = array(
'posts_per_page' => 3,
'paged' => $paged,
'post_type' => $atts['post_type'],
'orderby' => 'date',
'order' => 'DESC',
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) {
while ($the_query->have_posts()) {
$the_query->the_post();
get_template_part('template-parts/loop');
} // fine while
$big = 999999999; // numero improbabilmente grande
echo paginate_links(
array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'current' => max(
1,
get_query_var('paged')
),
'total' => $the_query->max_num_pages // $the_query è la query personalizzata
)
);
} // Paginazione all'interno dell'endif
return ob_get_clean(); // Restituisce il contenuto del buffer eliminando il buffer
wp_reset_query(); // Ritorna alla main_query() dopo aver restituito il contenuto bufferizzato
}
}

No, non lo fa se lo usi su una pagina, ad esempio. C'è una buona spiegazione qui e una descrizione dettagliata qui su come puoi risolverlo, ma in un modo "hacky" non raccomandato.
