web-dev-qa-db-ja.com

ページ区切り付きのカスタムカテゴリページの作成

先週、私は改ページ付きのカスタムカテゴリページを作成することでそれを理解しようとしていました。私はいろいろな方法で試しましたが、ページネーションは正しくできません。あなたの誰かが助けることができるなら。

私が実際にやりたかったことは私がワードプレスのテーマで私はページ名と同じ名前を持つすべてのカテゴリを表示するカスタムテンプレートを作りたかったです。

作成しようとしていたテンプレートにテンプレートを設定して、 'php'というページを作成しました。そしてそのページをクリックすると、 'php'カテゴリに属する​​すべての投稿を表示したいと思いました。

ここでのコードサンプル...

<?php
/**
 * Template Name: Category Temeplate
 *
 */

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(); ?>
1
Puni

ここにいくつか問題があります

  • 次のコードは間違っていて不要です

    $category = get_post();
    $category = $category->post_title;
    

    現在のページオブジェクトはget_queried_object()に保存されているので、この関数を使って投稿のタイトルを取得することができます。また、post_titleは、ここで使用する正しいプロパティではありません。 post_nameプロパティに保存されているポストスラッグを見てみましょう。 category_nameパラメーターは、 name ではなくカテゴリー slug を除いています。 category_nameパラメータは、私の考えでは、間違った名前です。それは女の子に男の子の名前を付けて、それからその人が質問であることを他の人に知ってもらうことが名前に基づいた女の子であることを期待するようなものです。

  • ここでは少し話題から外れていますが、構文を混同しないでください。構文を1つ選択して、それを守ってください。カーリーはデバッグが最も簡単で、ほとんどコードエディタでサポートされているので、それらを使用してください。また、コードを適切にインデントすると、読みやすくなり、デバッグしやすくなります。

  • 使用するには、実際にページ付けを設定する必要があります。そのためにはpagedパラメータを使う必要があります。これはこのサイトでたくさん扱われているので、私はそれに入るつもりはありません。

  • the_paging_nav()は中心的な機能ではないので、コードの作成者に連絡してカスタムクエリでコードを使用する方法を確認する必要があります。

次のようなものでうまくいくはずです

<?php
/**
 * Template Name: Category Temeplate
 *
 */

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( 'Older Entries', $query->max_num_pages );
            previous_posts_link( 'Newer Entries' );

            wp_reset_postdata();
        }
        ?>

    </main><!-- #main -->
</div><!-- #primary -->

<?php get_footer(); ?>
1
Pieter Goosen