web-dev-qa-db-ja.com

ブログ投稿のURLの前にmysite.com/blog/%postname%/を付けますが、作成者を引き続きmysite.com/authors/%nicename%に配置するにはどうすればよいですか。

私はたくさんのことを試しましたが、うまくいく解決策を見つけることができません。

私は私のサイトに構造を持たせたい:

mysite.com/ = homepage
mysite.com/blogs/ = blog archive
mysite.com/blogs/year/ = blog archive (in a specific year)
mysite.com/blogs/year/month/ = blog archive (in a specific month)
mysite.com/blogs/year/month/postname = blog post
mysite.com/authors/ = authors archive
mysite.com/authors/nicename = author profile
mysite.com/customposttype/ = custom post type archive
mysite.com/customposttype/postname = custom post type post

現在、パーマリンク構造として/blogs/%year%/%month%/%postname%/が設定されているので、作者の部分を除いてすべてが正しく動作します。それはmysite.com/blogs/authors/mysite.com/blogs/authors/nicenameにそれを強制します、これは望まれません、なぜならほとんどの作者はカスタムのポストタイプを作っていて、ブログではないからです。

私がここでチェックしたが正しい答えがないいくつかの投稿:

ブログ投稿のURLに正しくプレフィックスを付ける方法

パーマリンク質問:投稿の前にのみプレフィックスを追加する

他のカスタム投稿タイプのURLに影響を与えずに、通常の投稿タイプのURLを変更することはできますか?

1
ZachM

$wp_rewriteグローバルを操作することで、著者ベースを独立して設定できます。

function wpa55976_author_base() {
    global $wp_rewrite;
    $wp_rewrite->author_base = 'authors';
    $wp_rewrite->author_structure = '/' . $wp_rewrite->author_base . '/%author%';

    // EDIT - rewrite rule to force author urls to resolve:
    add_rewrite_rule('authors/([^/]+)/?$', 'index.php?author_name=$matches[1]', 'top');

}
add_action( 'init', 'wpa55976_author_base' );

あなたがこれを追加した後に書き換えをフラッシュするためにあなたのパーマリンクページを訪問するようにしてください。

WordPressはデフォルトではこのページを提供していないため、mysite.com/authors/ = authors archiveを入手することはできません。ただし、authorsname__ページを作成したり、カスタムテンプレートを使用したり、それを処理するための書き換え規則を追加することはできます。

4
Milo