web-dev-qa-db-ja.com

共有カスタム分類法を使用したカスタム投稿タイプリストの素敵なURLは?

モデレータのメモ:タイトルは「クエリ文字列値を持つ共有カスタム分類URLをNice URLに変換する」でした)

カスタム分類テンプレートがあります。2つのカスタム投稿タイプで使用されるtaxonomy-country.php'event'および'contact'。表示するページを設定します。たとえば、

  • 「コスタリカのすべての連絡先」、および

  • 「アメリカの全イベント」

これらのURLは現在私にそれらのリストを与えます:

しかし、私はこれらのURLを以下のようなNice URLとして実装したいと思います。

もっといいのは、次のようなものです。

最初の好みのために、あなたはそのような追加の書き換え規則でフィルタリングする必要があるでしょう。

function __extra_country_rewrite_rules( $rules )
{
    global $wp_rewrite;
    if ( !isset( $wp_rewrite ) )
        $wp_rewrite = new WP_Rewrite;

    $m1 = $wp_rewrite->preg_index(1); // preg match backreferences
    $m2 = $wp_rewrite->preg_index(2);
    $m3 = $wp_rewrite->preg_index(3);

    $rules['country/([^/]+)/([^/]+)s/feed/(feed|rdf|rss|rss2|atom)/?$'] = "index.php?country=$m1&post_type=$m2&feed=$m3";
    $rules['country/([^/]+)/([^/]+)s/(feed|rdf|rss|rss2|atom)/?$'] = "index.php?country=$m1&post_type=$m2&feed=$m3";
    $rules['country/([^/]+)/([^/]+)s/page/?([0-9]{1,})/?$'] = "index.php?country=$m1&post_type=$m2&paged=$m3";
    $rules['country/([^/]+)/([^/]+)s/?$'] = "index.php?country=$m1&post_type=$m2";

    return $rules;
}
add_filter( 'country_rewrite_rules', '__extra_country_rewrite_rules' );

2つ目は、書き換えの中で投稿タイプをハードコードする必要があるため、あまり動的ではありません(前者の「国」とは異なり、URLには最初の「識別子」はありません)。

function __extra_country_rewrite_rules( $rules )
{
    global $wp_rewrite;
    if ( !isset( $wp_rewrite ) )
        $wp_rewrite = new WP_Rewrite;

    $m1 = $wp_rewrite->preg_index(1); // preg match backreferences
    $m2 = $wp_rewrite->preg_index(2);
    $m3 = $wp_rewrite->preg_index(3);

    $rules["(event|contact)s/country/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$"] = "index.php?post_type=$m1&country=$m2&feed=$m3";
    $rules["(event|contact)s/country/([^/]+)/(feed|rdf|rss|rss2|atom)/?$"] = "index.php?post_type=$m1&country=$m2&feed=$m3";
    $rules["(event|contact)s/country/([^/]+)/page/?([0-9]{1,})/?$"] = "index.php?post_type=$m1&country=$m2&paged=$m3";
    $rules["(event|contact)s/country/([^/]+)/?$"] = "index.php?post_type=$m1&country=$m2";

    return $rules;
}
add_filter( 'rewrite_rules_array', '__extra_country_rewrite_rules' );

変更を有効にするには、パーマリンクをフラッシュする必要があります(コードが追加されたら、パーマリンク設定ページにアクセスしてください)。

それでも物事が正しく機能していないことがわかった場合は、投稿タイプとカスタム分類法を登録するために使用するコードで質問を更新してください。

2
TheDeadMedic