Paginare când folosim wp_query?
<!-- interogare -->
<?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() ) : ?>
<!-- început buclă -->
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<h2><a href="<?php the_permalink(); ?>" title="Citește"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php echo get_the_date(); ?>
<?php endwhile; ?>
<!-- sfârșit buclă -->
<!-- CE TREBUIE PUS AICI?????? -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e( 'Ne pare rău, nu s-au găsit articole care să corespundă criteriilor.' ); ?></p>
<?php endif; ?>
Am încercat totul pentru a obține paginarea pe această pagină statică folosind funcția wp_query dar fără succes. Există un comentariu în acest script numit CE TREBUIE PUS AICI?????... deci ce trebuie pus aici?
Acest cod este pe o pagină statică care nu este nici pagina principală și nici pagina de articole.
Înlocuiți <!-- WHAT GOES HERE?????? -->
cu codul de paginare de mai jos:
<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ări Recente', 'text-domain' ) ),
'next_text' => sprintf( '%1$s <i></i>', __( 'Postări Mai Vechi', 'text-domain' ) ),
'add_args' => false,
'add_fragment' => '',
) );
?>
</div>
WordPress vine cu o funcție utilă numită paginate_links()
care se ocupă de munca grea. În exemplul de mai sus, obiectul personalizat WP_Query $query
este folosit în locul obiectului global $wp_query
.
Editare:
Ca răspuns la comentariul lui @mark-in-motion, iată un exemplu de funcție wrapper pentru paginate_links()
pe care am făcut-o acum ceva timp. Puteți adăuga acest cod în functions.php
al temei, apoi apelați echo my_pagination();
în șablon pentru a afișa paginarea.
/**
* Paginare numerică prin funcția de bază WP paginate_links().
* @link http://codex.wordpress.org/Function_Reference/paginate_links
*
* @param array $args
*
* @return string HTML pentru paginarea numerică
*/
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' => __( '« Prev', 'text-domain' ),
//'next_text' => __( 'Next »', 'text-domain' ),
//'prev_text' => __( '‹ Prev', 'text-domain' ),
//'next_text' => __( 'Next ›', 'text-domain' ),
'prev_text' => sprintf( '<i></i> %1$s',
apply_filters( 'my_pagination_page_numbers_previous_text',
__( 'Postări Recente', 'text-domain' ) )
),
'next_text' => sprintf( '%1$s <i></i>',
apply_filters( 'my_pagination_page_numbers_next_text',
__( 'Postări Mai Vechi', 'text-domain' ) )
),
'add_args' => false,
'add_fragment' => '',
// Argumente personalizate care nu fac parte din nucleul WP:
'show_page_position' => false, // Opțional, permite afișarea HTML-ului "Pagina X din XX".
);
$pagination_args = apply_filters( 'my_pagination_args', array_merge( $pagination_args, $args ), $pagination_args );
$output .= paginate_links( $pagination_args );
// Opțional, afișează Pagina X din XX.
if ( true == $pagination_args['show_page_position'] && $wp_query->max_num_pages > 0 ) {
$output .= '<span class="page-of-pages">' .
sprintf( __( 'Pagina %1s din %2s', 'text-domain' ), $pagination_args['current'], $wp_query->max_num_pages ) .
'</span>';
}
return $output;
}

Cred că am întârziat prea mult. Dar întrebarea este... de ce ar trebui să scriu 999999999?

Acesta este un truc pentru a obține rezultatele funcției get_pagenum_link()
cu %#%
în loc de numărul paginii (999999999).

Există vreo metodă de a pune asta în functions.php, astfel încât să poți apela doar pageinate_links()
și nu tot codul?

Acest cod este pentru Paginare Personalizată în WordPress. Puteți urma pașii pentru a vă crea propria paginare în WordPress.
<?php
/**
* Template Name: Pagină Personalizată
*/
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 );
?>
<!----start-------->
<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> <!-- sfârșit articole blog -->
<?php endwhile; ?>
<?php if (function_exists("pagination")) {
pagination($custom_query->max_num_pages);
} ?>
</main><!-- #main -->
</div><!-- #primary -->
</div><!-- .wrap -->
<!----end-------->
<?php get_footer();
Referință: https://www.wpblog.com/use-wp_query-to-create-pagination/

Se pare că funcția pagination nu există, te rog să mă ajuți

@KarueBensonKarue asta se întâmplă pentru că autorul acestui răspuns a copiat ceva de pe un alt website, iar tu ai copiat de pe acest website
Dacă accesezi sursa https://wpblog.com/use-wp_query-to-create-pagination/ vei vedea cum explică ei definirea funcției pagination()

Dacă ajunge cineva aici încercând să creeze un wp_query cu paginare din interiorul unui 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(); // Pornim bufferul de ieșire
global $paged;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$atts = shortcode_atts(
array(
'post_type' => 'post',
// orice doriți
),
$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');
} // sfârșitul while
$big = 999999999; // avem nevoie de un număr improbabil
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 // $q este interogarea personalizată
)
);
} // Paginarea în interiorul endif
return ob_get_clean(); // Returnăm conținutul bufferului și îl ștergem
wp_reset_query(); // Ne întoarcem la main_query() după returnarea conținutului bufferizat
}
}

Nu, nu se întâmplă dacă îl folosești pe o pagină, de exemplu. Există o explicație bună aici și o descriere detaliată aici despre cum poți rezolva problema, dar într-un mod "hacky" care nu este recomandat.
