Help us understand the problem. What is going on with this article?

WordPressで投稿のアーカイブ(投稿一覧)を設定する

More than 3 years have passed since last update.

WordPressは
トップページと投稿のアーカイブのテンプレートが基本的に同じ。

管理画面の表示設定フロントページの表示
固定ページにすればすんなり分けられるけど
固定ページつくるのは気持ち悪い。

ので探していたら

v4.4から追加されたregister_post_type_argsに引っ掛ければで設定を変えられるらしいことがわかる。
投稿アーカイブを有効にする (WordPress 4.4以降)

っていうことでやったらできたにはできたけど
シングルのスラッグとアーカイブのスラッグが同じだと問題が。

投稿のパーマリンクを
/news/%post_id%
としている場合で
$args['has_archive'] = 'news';

とすると
/news/ でアーカイブは表示できるが
/news/1 とかでシングルが404になる。

ので却下で海外を探してみるとあった。
Creating a blog post archive at /blog/ without awkwardly publishing a page
フィードも考慮されていてマーベラス。

自分用に変えると

functions.php
/**
 * 投稿のアーカイブページを設定
 */
add_filter('register_post_type_args', function($args, $post_type) {
    if ('post' == $post_type) {
        global $wp_rewrite;
        $archive_slug = 'news';
        $args['label'] = 'ニュース';
        $args['has_archive'] = $archive_slug;
        $archive_slug = $wp_rewrite->root.$archive_slug;
        $feeds = '(' . trim( implode('|', $wp_rewrite->feeds) ) . ')';
        add_rewrite_rule("{$archive_slug}/?$", "index.php?post_type={$post_type}", 'top');
        add_rewrite_rule("{$archive_slug}/feed/{$feeds}/?$", "index.php?post_type={$post_type}".'&feed=$matches[1]', 'top');
        add_rewrite_rule("{$archive_slug}/{$feeds}/?$", "index.php?post_type={$post_type}".'&feed=$matches[1]', 'top');
        add_rewrite_rule("{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type={$post_type}".'&paged=$matches[1]', 'top');
    }
    return $args;
}, 10, 2);

で無事にarchive.phpで読めるようになったと。

ちなみに

$args['label'] = 'ニュース';
てやると
get_post_type_object($post_type)->label;
を使っても「投稿」と表示されずに「ニュース」と表示できる。

ki6ool
絶対ワードプレス使うマン
https://6oolab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした