web-dev-qa-db-ja.com

URLから分類基準や用語を削除する

これについての投稿がたくさんあることを私は知っていますが、それらのどれも私の問題に答えていません。

私はカスタムカテゴリタイプ(messagetypesという名前)を持つカスタムビルドテーマで作業しています。 mediaという名前のカテゴリが作成されています。このテーマは、クリックしたときにmediaというラベルの付いたすべての項目を表示するメニュー項目を追加できるように設定されていますが、ページのURLはmysite.com/messagetypes/mediaです。 URLからメッセージタイプを削除して、それをmysite.com/mediaだけにしたいのです。

一番近いのは、カスタムカテゴリ機能ページに追加したときです。

register_taxonomy( 'messagetypes', ...

と呼ばれる

'rewrite' => array( 'slug' => ''),

これを実行すると、このページから目的の結果が得られますが、他のすべてのページリンクは壊れます(パーマリンクを使用)。

書き換え配列にも追加してみました

'with_front' => false

しかしそれもうまくいきませんでした。

どんな助けや洞察力も素晴らしいでしょう。私はこれで何時間も無駄にしました、そしてそれは私の実を動かします。

ありがとう。

6
danstever

これを実行すると、このページから目的の結果が得られますが、他のすべてのページリンクは壊れます(パーマリンクを使用)。

というのも、WordPressはあなたがページを求めているという手がかりを得ていないからです。それはあなたがそれをするようにあなたが言ったことをやっています。

http://example.com/Xのように見えるすべてのURLについて、messagetypeがXの投稿を探してください。

だからこそ、そこに '識別子'が必要になります。それはそれがページ、アーカイブ、カテゴリの要求間の違いを区別することができるように...

この機能が本当に必要な場合は、書き換えマップの先頭に冗長な書き換え規則を追加することをお勧めします。

add_rewrite_rule( 'media/?$', 'index.php?messagetypes=media', 'top' );

あなたがたくさんのメッセージタイプを持っているならば、あなたは用語の作成と削除に引っ掛かり、そして書き換え規則を動的に更新&フラッシュしたいかもしれません。

そうでなければ、あなたのfunctions.phpの中のそれぞれの用語のために例を繰り返してから、あなたのパーマリンクをフラッシュしてください(ちょうどadminのパーマリンクオプションページにアクセスしてください)。

最後に、register_taxonomyの呼び出しを「通常の状態」に戻します。つまり、rewrite引数を省略し、term_linkフィルタを使用してカスタムパーマリンクを交換します。

function __custom_messagetypes_link( $link, $term, $taxonomy )
{
    if ( $taxonomy !== 'messagetypes' )
        return $link;

    return str_replace( 'messagetypes/', '', $link );
}
add_filter( 'term_link', '__custom_messagetypes_link', 10, 3 );
10
TheDeadMedic