web-dev-qa-db-ja.com

カスタムパブリックユーザーページの作成

カスタムユーザーページを作成できるようにするプラグインを開発したいです。私は本当に著者アーカイブテンプレートがURLを処理する方法が好きです:/ author/username。その機能をそのままにしておきたいので、author_baseを書き換えたくありません。

ユーザーが/ users/usernameにアクセスしたときにカスタムテンプレートに移動するように、そのきれいなURLレイアウトを自分のプラグインに複製したいと思います。プラグインからユーザーのデータを検索してテンプレートを表示できるように、URLからユーザー名を正しく解析する方法の例があるかどうかを知りたいです。

4
Pat

私はここで見つけた@bybloggers答えからこれへの答えを見つけました。 https://wordpress.stackexchange.com/a/58793/12920

私は自分のニーズに合うように彼のコードをわずかに修正しましたが、これは私のために機能したコードであり、まさに私が探していたものでした。

// Create the query var so that WP catches the custom /member/username url
function userpage_rewrite_add_var( $vars ) {
    $vars[] = 'member';
    return $vars;
}
add_filter( 'query_vars', 'userpage_rewrite_add_var' );

// Create the rewrites
function userpage_rewrite_rule() {
    add_rewrite_tag( '%member%', '([^&]+)' );
    add_rewrite_rule(
        '^member/([^/]*)/?',
        'index.php?member=$matches[1]',
        'top'
    );
}
add_action('init','userpage_rewrite_rule');

// Catch the URL and redirect it to a template file
function userpage_rewrite_catch() {
    global $wp_query;

    if ( array_key_exists( 'member', $wp_query->query_vars ) ) {
        include (TEMPLATEPATH . '/user-profile.php');
        exit;
    }
}
add_action( 'template_redirect', 'userpage_rewrite_catch' );

これが私のfunctions.phpファイルに入った後、私は自分のパーマリンクを再保存しなければなりませんでした。

パーマリンクを再保存しても100%仕事が終わらずwww.mysite.com/member/usernameにアクセスしても404にならなかったので、これを自分のfunctions.phpに入れてサイトを1回ロードして手動でルールをフラッシュする必要がありました。それを削除すると、サイトが読み込まれるたびに実行されることはなくなります。これは不要なオーバーヘッドのためです。

// Code needed to finish the member page setup
function memberpage_rewrite() {
     global $wp_rewrite;
     $wp_rewrite->flush_rules();
}
add_action('init','memberpage_rewrite');
4
Pat