web-dev-qa-db-ja.com

.htaccessを修正せずにWordPress Multisite Customの申し込みページにとどまる

はい、 WordPress Multisite 用のカスタムサインアップページを作成するのをやめました。

それはよく修正された質問です、そして、私たちの多くは答えを求めています。誰かがそれを手に入れたかもしれませんが、それでも私はこの問題のための堅実で全体論的なものを見つけることができません。私は.htaccess以外の方法、つまりPHPまたはWordPressを見つけようとしています。

ステップ1:

私はこの探求で見つけられた最も明白な記事を研究しました:

さて、今私は/wp-signup.phpのすべてのコードを私のテーマのsignup.phpという名前のファイルにコピーし、それをページテンプレートにして、http://example.com/signupというURLを持つページと呼びました。

必要な場所に変更を加えました。 get_header( 'wp-signup' );の代わりに私は私のテーマget_header('null');から私のカスタムのものを使いました。それ(header-null.php)は、私のテーマのデフォルトのheader.phpファイルと比べて、設計とアーキテクチャーにおいてはほとんど必要ありません。

ああ! WordPressのどこにもheader-wp-signup.phpはありません

同様に私はget_footer( 'wp-signup' );を次のように置き換えました。

    ?> <!-- /ending of php tag -->
    </div> <!-- /.container .site-area .not-logged-in-page -->

<?php wp_footer(); ?>

</body>
</html>

ステップ2:

@toschoは、すでにロードされているファイルを呼び出すという2つの問題を解決するのに役立ちました。そのため、絶対パスを表示する代わりに、単に行をコメントアウトしました。

//require( dirname(__FILE__) . '/wp-load.php' );

そして

//require( dirname( __FILE__ ) . '/wp-blog-header.php' );

今、私は新しく修正された申し込みページのための素晴らしい、作業ファイルです。 /wp-signup.phpを使用せずに、.htaccessからここにトラフィックを誘導する必要があります。

ステップ3:

このWordPress.orgサポートスレッドはとても役に立ちました。

今、私はwp-content/mu-plugins/sign-up-location.phpにファイルを作る "mu-plugin"を作りました。そこで2つの関数を使いました。

/**
 * Changing the Registration page URL.
 * 
 * @return string The URL of the new page.
 * --------------------------------------------------------------------------
 */
function project_signup_page() {
    $page =  network_site_url() .'signup/';
    return $page;
}
add_filter( 'wp_signup_location', 'project_signup_page' );


/**
 * Redirect from default signup page to custom page.
 * 
 * @return void
 * --------------------------------------------------------------------------
 */
function project_redirect_from_default_signup() {
    if( strpos($_SERVER['REQUEST_URI'], 'wp-signup.php')) {
        wp_redirect(network_site_url() .'signup/');
        exit();
    }
}
add_action( 'plugins_loaded', 'project_redirect_from_default_signup' );

最初の方法は、登録URLを私のカスタムパスに変更することです。そして2番目のものは私が望むもので、トラフィックを/wp-signup.phpなしで/signupから.htaccessへと駆動します。

注:MUプラグインを作成する代わりに、通常のプラグインを使用して同じ効果を得ることができます。

ステップ4(準備ステップ):

@ toschoの提案に従って、ページテンプレートのものをRewrite Endpointに置き換えました。

<?php
/**
 * Rewrite endpoint : /register.
 *
 * @return void
 * --------------------------------------------------------------------------
 */
function project_registration_endpoint() {
    add_rewrite_endpoint( 'register', EP_ROOT );
    if( get_option("EDIT_REWRITE_RULE") != 1 ) {
        flush_rewrite_rules();
        update_option( "EDIT_REWRITE_RULE", 1 );
    }
}
add_action( 'init', 'project_registration_endpoint' );

/**
 * Custom Template for Registration.
 *
 * @param  string $template Template to be loaded.
 * @return string           Our custom template to show up.
 * --------------------------------------------------------------------------
 */
function project_custom_templates( $template ) {
    if( ! is_admin() ) {
        if( get_query_var('register') || strpos($_SERVER['REQUEST_URI'], 'wp-signup.php') ) {
            $template = get_template_directory() .'/signup.php';
        }
    }
    return $template;
}
add_filter( 'template_include', 'project_custom_templates' );

/**
 * Return a value for '/register'
 * Make sure that 'get_query_var( 'register' )' will not return just an empty string if it is set.
 *
 * @link   http://wordpress.stackexchange.com/a/51450/22728
 * @link   https://www.pmg.com/blog/a-mostly-complete-guide-to-the-wordpress-rewrite-api/
 *
 * @param  array $vars  Query variables.
 * @return array        Modified query variables.
 * --------------------------------------------------------------------------
 */
function project_set_epex_var( $vars ) {
    isset( $vars['register'] ) and $vars['register'] = true;
    return $vars;
}
add_filter( 'request', 'project_set_epex_var' );

修正:そしてその時点で、起こりうる競合を解決するためにスラッグ/signup/registerに変更しました。それに応じてmu-pluginの文字列を変更しました。そして、ページテンプレートを廃止します。

すべてうまく動いています、そして私は自分の望むものを手に入れました:) ...を除いて...

成功またはエラーメッセージ.
すべての成功またはエラーメッセージは、wp_redirect()と共に消えています。 :○

私は自分のファイルをチェックしました、そう、show_user_form()$errorsパラメータでそこにあります、エラーまたは成功メッセージを除いて、すべて問題ありません。

カスタムページの申し込みページに成功メッセージやエラーメッセージを表示するにはどうすればよいですか。

ベンガル語で

私は 私のブログ記事 でベンガル語のすべての情報源で詳細にすべてを詳細に説明しました - 私は恐れています、ベンガル語への自動翻訳はそれまでではありません良い。

1
Mayeenul Islam

signup.phpファイルで、フォームactionwp-signup.phpからsignup.php...に変更してみてください。このように、フォームデータはリダイレクトを通過せず、直接同じファイルに戻されます。これにより、フォーム投稿の$errorsが保持されます。

1
majick