Crearea unei pagini de categorie personalizate cu paginare
În ultima săptămână am încercat să găsesc o soluție pentru crearea unei pagini de categorie personalizate cu paginare. Am încercat în mai multe moduri dar nu reușesc să implementez corect paginarea. Dacă cineva mă poate ajuta.
Ce vreau de fapt să fac este ca în tema mea WordPress să creez un șablon personalizat care să afișeze toate categoriile care au același nume ca și numele paginii.
EXEMPLU
Am creat o pagină numită 'php' cu șablonul setat la template-ul pe care încerc să-l construiesc. Și când dau click pe acea pagină, vreau să afișez toate postările care aparțin categoriei 'php'.
Iată exemplul de cod...
<?php
/**
* Numele șablonului: Category Template
*
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
$category = get_post();
$category = $category->post_title;
$query = new WP_Query( array(
'category_name' => $category,
'order' => 'asc',
'post_type' => 'post',
'post_status' => 'publish',
));
?>
<?php
if ($query->have_posts()) {
while ($query->have_posts()) : $query->the_post(); ?>
<article id="post-<?php the_ID(); ?>">
<header class="entry-header">
<?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>
</header><!-- .entry-header -->
<div class="entry-content">
<?php
the_content();
?>
</div><!-- .entry-content -->
</article><!-- #post-## --><hr>
<?php endwhile; ?>
<?php the_paging_nav(); ?>
<?php
}
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_footer(); ?>
Aveți câteva probleme aici
Următoarea bucată de cod este greșită și inutilă
$category = get_post(); $category = $category->post_title;
Obiectul paginii curente este salvat în
get_queried_object()
, așa că puteți folosi această funcție pentru a obține titlul postării. De asemenea,post_title
nu este proprietatea corectă de utilizat aici. Doriți să căutați slug-ul postării, care este salvat în proprietateapost_name
. Parametrulcategory_name
așteaptă slug-ul categoriei, nu numele. Parametrulcategory_name
, în opinia mea, este denumit greșit. Este ca și cum ai da unei fete un nume de băiat și apoi te aștepți ca alții să știe că persoana în cauză este o fată bazându-te pe nume.Puțin în afara subiectului aici, dar nu amestecați sintaxa. Alegeți o singură sintaxă și respectați-o. Deoarece acoladele sunt cele mai ușor de depanat și cele mai acceptate de editorii de cod, utilizați-le. De asemenea, indentificați corect codul, este mai ușor de citit și de depanat.
Trebuie să setați efectiv paginarea înainte de a o putea utiliza. Pentru asta trebuie să folosiți parametrul
paged
. Nu voi intra în detalii, deoarece acest subiect a fost tratat de multe ori pe acest site.the_paging_nav()
nu este o funcție din nucleu, așa că ar trebui să contactați autorul codului pentru a afla cum ar trebui utilizat codul cu interogări personalizate.
Ceva de genul următor ar trebui să funcționeze
<?php
/**
* Template Name: Șablon Categorie
*
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
$current_page = get_queried_object();
$category = $current_page->post_name;
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$query = new WP_Query(
array(
'paged' => $paged,
'category_name' => $category,
'order' => 'asc',
'post_type' => 'post',
'post_status' => 'publish',
)
);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post(); ?>
<article id="post-<?php the_ID(); ?>">
<header class="entry-header">
<?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>
</header><!-- .entry-header -->
<div class="entry-content">
<?php the_content(); ?>
</div><!-- .entry-content -->
</article><!-- #post-## --><hr>
<?php
}
// next_posts_link() usage with max_num_pages
next_posts_link( 'Postări mai vechi', $query->max_num_pages );
previous_posts_link( 'Postări mai noi' );
wp_reset_postdata();
}
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_footer(); ?>

Mulțumesc pentru răspuns și sfat. Încă o întrebare, pot folosi funcția twentyfourteen_paging_nav() în acest caz pentru că doresc o navigare cu paginare numerotată.

Nu, nu poți, ea suportă doar interogarea principală (dar o poți modifica să funcționeze și cu interogări personalizate). Am scris o funcție extinsă de paginare pentru asta acum ceva timp. Poți să o verifici aici. Doar ține minte, nu va funcționa pe versiuni PHP mai vechi de 5.4. Vei avea nevoie de cel puțin PHP 5.4

Când am încercat această soluție, tot primesc "Pagina nu a fost găsită". Știu că este foarte veche, dar este singura care m-a ajutat să ajung mai departe decât orice altceva. Încerc să parcurg paginile din categoriile mele arizona-beer și arizona-wine:
$current_page = get_queried_object();
$category = $current_page->post_name;
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 2, // Numărul de articole pe pagină
'post_type' => array( 'arizona_wine', 'arizona_beer', 'post' ), // Tipurile de postări
'paged' => $paged, // Pagina curentă
'category_name' => $category, // Numele categoriei
);
$category_posts = new WP_Query($args); // Interogare personalizată
