Crearea unei pagini de categorie personalizate cu paginare

5 iul. 2015, 17:18:14
Vizualizări: 32.5K
Voturi: 2

Î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(); ?>
0
Toate răspunsurile la întrebare 2
3

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 proprietatea post_name. Parametrul category_name așteaptă slug-ul categoriei, nu numele. Parametrul category_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(); ?>
5 iul. 2015 18:56:04
Comentarii

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ă.

Puni Puni
5 iul. 2015 19:16:11

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

Pieter Goosen Pieter Goosen
5 iul. 2015 19:22:17

Îmi pare rău că am fost ocupat zilele trecute și nu am putut reveni să verific răspunsul. Oricum, îți mulțumesc foarte mult că ai răspuns la întrebările mele și da, am PHP 5.5.12 așa că am încercat codul tău și funcționează.

Puni Puni
6 iul. 2015 20:21:59
0

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ă
16 iun. 2024 01:44:22