web-dev-qa-db-ja.com

ネストスラッグを使って投稿をハイパーリンクで表示するにはどうすればいいですか?

重要な質問

どのように私はこのようなネストスラッグを作成するのですか -
127.0.0.1/wordpress/displaypage/family1/members/
127.0.0.1/wordpress/displaypage/family2/members/

ここで - slugdisplaypageはページslug、そしてfamily1family2は私のカスタムテーブルに保存したグループの名前です。メンバーは各グループのユーザー数を表示するタブですこの質問に回答してください

1
haider

これは 書き換えルールの追加 によって実現できます。

まず、カスタム値をルールに格納する クエリ変数の追加

function wpd_family_query_var( $query_vars ) {
    $query_vars[] = 'wpd_family';
    $query_vars[] = 'wpd_members';
    return $query_vars;
}
add_filter( 'query_vars', 'wpd_family_query_var' );

次に、displaypage/family/displaypage/family/members/の両方のリクエストをキャプチャするためのルールを追加します。

function wpd_add_family_rewrite_rules() {
    add_rewrite_rule(
        'displaypage/([^/]+)/?$',
        'index.php?pagename=displaypage&wpd_family=$matches[1]',
        'top'
    );
    add_rewrite_rule(
        'displaypage/([^/]+)/members/?$',
        'index.php?pagename=displaypage&wpd_family=$matches[1]&wpd_members=true',
        'top'
    );
}
add_action( 'init', 'wpd_add_family_rewrite_rules' );

忘れないでください、変更した後は 書き換えルールをフラッシュ する必要があります。

そうすると、 get_query_var() を使って parse_queryアクションの後 のどこでもあなたのクエリvarsの値にアクセスすることができます。

if( $family = get_query_var( 'wpd_family' ) ){
    echo 'family: ' . $family;
}

if( $members = get_query_var( 'wpd_members' ) ){
    echo 'members: ' . $members;
}
3
Milo