web-dev-qa-db-ja.com

ワードプレスインストール後の自動ログイン

私はwordpressで製品を作成しています、そしてここで私はwpインストールの間にカスタムテーマとプラグインをインストールしています。

ここまで問題ありません。しかし、管理者はインストールの終了時にログインを促すことなく自動的にログインしたいと思っているページにリダイレクトしたいと考えています。

何か手助け?

私はwp-admin/install.phpのwp_install()の後にこのコードを入れようとしました

        $creds = array();

        $creds['user_login'] = $_POST['user_name'];

        $creds['user_password'] = $_POST['admin_password'];

        $creds['remember'] = true;          

        $user = wp_signon( $creds, false );

        if ( is_wp_error($user) )
            echo $user->get_error_message();                
        wp_redirect(home_url('products'));exit;
1
Balas

あなたが抱えている問題は、コアファイルを編集しているという問題とは別に、早すぎるフックで接続していることなので、wp-admin/install.phpを見てみましょう。

まったくフックはありませんが、すべてが正しくレンダリングされたときのページの最後には、wp_print_scripts( 'user-profile' )が必要です。そして喜んでそこに私達は多くのフックを見つけるでしょう。その上に直接その関数の中に置かれていて、関数自身の名にちなんで名付けられたもの:wp_print_scripts。そして他のWP_Scriptsの中。

それでは、これを小さなカスタムプラグインで試してみてください(未テスト)。

<?php
defined( 'ABSPATH' ) or exit;
/* Plugin Name: (#129229) Auto-Login User after install */

add_action( 'wp_print_scripts', 'wpse129229LoginAfterInstall' );
function wpse129229LoginAfterInstall()
{         
    $user = wp_signon( array(
        'remember'      => true,
        'user_login'    => $_POST['user_name'],
        'user_password' => $_POST['admin_password'],
    ), false );

    if ( is_wp_error( $user ) )
        echo $user->get_error_message();                

    exit( wp_redirect( home_url( "products" ) ) );
}

admin_passwordが正しいformフィールドid/nameであるかどうかわかりません。通常/ IIRC WPはuser_passwordを使用します。次に、ユーザーはhome_url( "products" )でログインできません。そのためにはadmin_url()を使う必要があります。

最後の注意:絶対にコアファイルを編集しないでください。アップグレード中にすべての変更が失われます。インストールする(アップグレードしない)ことだけが目的であれば(WP forkを維持したい場合は)何らかの方法で有効ですが、アップグレードしたい場合はそうではありません。

1
kaiser

まず、コアファイルを編集するのではなく、次の点に注意してください。

  1. wp-admin/install.phpの右上にwp-admin/includes/upgrade.phpファイルが含まれています。
  2. そのupgrade.phpファイルはカスタムwp-content/install.phpファイルをチェックし、もしあればそれを含みます。そのため、あなたのカスタムinstall.phpファイルはインストールプロセスに含まれます。これは重要です。
  3. wp_install()関数はif ( !function_exists() )型のチェックでラップされています。 wp_install()関数自体が「プラグイン可能」であることを意味します。

言い換えれば、あなたがwp-content/install.phpであなた自身のwp_install()関数を定義するならば、あなたのものは代わりに使われます、あなたはコアを編集することなくあなたが好きなすべての機能をカスタマイズすることができます。

そのため、ステップ1:既存のwp_install()関数をそのままwp-content/install.phpファイルにコピーします。コアコードを編集する代わりに、この機能を変更します。

ステップ2に関しては、結果として生じるユーザを自動ログインし、リダイレクトしたいと思います。幸いなことに、あなたがしなければならないのは、クッキーを設定してからリダイレクトして終了することだけです。簡単にできます。関数の最後にあるreturn arrayビットの代わりに、もっと次のようにします。

wp_set_auth_cookie($user_id, true);
wp_safe_redirect(home_url('products'));
exit;

注:未テスト。まだ試していません。しかし、それはうまくいくはずです。エラー処理などを追加する必要があるかもしれません。

0
Otto