BlogというWP管理で新しいページを作成し、それ用のカスタムページテンプレートを作成しました。テンプレートには、簡単なページカスタムクエリがあります。
$query = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => 1,
'paged' => $paged ));
私が手動でurlの '/ page /'の部分の後に利用可能であるより大きいページ番号をタイプするときを除いて、すべてが問題ないように見えます。ページは404エラーをスローしませんが、カスタムループなしでページを通常どおりにレンダリングします。それは正常な動作ですか?もしそうなら、どのように私は404テンプレートページを投げるべきですか?
また、1つ質問があります。
Wordpress管理でページを作成する必要なしに、カスタムテーマページを作成することは可能ですか?ほとんどの場合、私はページのコンテンツさえも使わず、空のままにします。その後、誰かがそのページを削除したり、ページのスラッグを変更したりすると、Webサイトの一部が破損する可能性があります。
もっと愚かな証拠ともっと管理者に優しい解決策はありますか?
シモンズ:これは完全なpage-blog.phpソースコードです:
<div id="primary" class="content-area">
<main id="main" class="site-main">
<h1><?=get_theme_mod('crochelou-blog-main-headline') ?><span class="sub-headline"><?=get_theme_mod('crochelou-blog-sub-headline') ?></span></h1>
<section id="page-container">
<nav id="blog-nav-wrapper"><?php
wp_nav_menu( array(
'menu_id' => 'category-menu',
'menu' => 'category-menu'
) );
?></nav>
<?php
$query = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => 1, 'paged' => $paged )); ?>
<section id="main-blog-loop"><?php
if($paged > 1){ ?>
<a href="<?= get_pagenum_link($paged - 1) ?>" class="pagination-arrow arrow left arrow-left prev"></a>
<?php }
?><div class="wrapper articles">
<?php
while($query->have_posts()): $query->the_post(); ?>
<article class="crochelou-card blog">
<div class="blog image" style="background-image: url('<?=esc_url(the_post_thumbnail_url('medium')) ?>')"></div>
<div class="categories"><?php
$categories = get_the_category();
foreach($categories as $category){
$name = $category->name;
$link = get_category_link($category->term_id); ?>
<a href="<?= $link ?>" class="catgory"><?= $name ?></a>
<?php
}
?></div>
<span class="date"><?= get_the_date('d') . '\\' . get_the_date('m') . '\\' . get_the_date('Y') ?></span>
<h4 class="headline blog"><a href="<?= get_the_permalink() ?>"><?= get_the_title() ?></a></h4>
<div class="perex excerpt"><?php the_excerpt(); ?></div>
<a class="link read-more" href="<?= get_the_permalink() ?>" >číst..</a>
</article>
<?php endwhile;
?>
</div><?php
if($paged < $query->max_num_pages){ ?>
<a href="<?= get_pagenum_link($paged + 1) ?>" class="pagination-arrow arrow right arrow-right right"></a>
<?php }
?>
</section>
<?php if($paged < $query->max_num_pages){ ?>
<div id="blog-pagination">
<nav class="pagination">
<ul>
<?php
for($i=1; $i <= $query->max_num_pages; $i++){
if($i === $paged){ ?>
<span class="current"><?= $i ?><?php if($i < $query->max_num_pages){ echo ','; } ?></span>
<?php }else{ ?>
<a href="<?= get_pagenum_link($i) ?>"><?= $i ?><?php if($i < $query->max_num_pages){ echo ','; } ?></a>
<?php }
}
?>
</ul>
</nav>
</div>
<?php }
?>
<!-- THIS WILL JUST RENDER 'ABOUT ME' TEST FROM ADMINISTRATION -->
<div class="separator"></div>
<?php $page = get_page_by_path( 'o-mne' ); ?>
<article id="about">
<h3 class="title"><?= $page->post_title ?></h3>
<?php
$content = $page->post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
?>
<div id="about-content"><?= $content ?></div>
</article>
</section>
</main><!-- #main -->
</div><!-- #primary -->
WPはページを見つけることができるので404は表示されません。そして、それはあなたがあなた自身のロジックを追加したテンプレートファイルにリクエストを委任します。
そのファイルに独自の404処理を構築することもできますが、より良い方法は、出力をレンダリングするためにarchive.php(まさにこの投稿タイプの場合はarchive-post.php)を使用し、 投稿を見つけるために使用されるWP_Queryを操作するためのpre_get_postsアクション (ページサイズのカスタマイズ)。そのようにしているなら、要求されたページが最後の利用可能なページより大きければWPは404を正しくトリガーするでしょう。