web-dev-qa-db-ja.com

Wp_ajaxとwp_ajax_noprivフックを使う

Ajaxリクエストを送信し、ユーザーがログインしている場合はそれを処理したいのです。したがって、次の2つのフックを使用したいのですが、正しく使用しているかどうかわかりません。

両方のフックに同じ関数take_action_functionを使用してから、ユーザーがログインしているかどうかを確認してください。それとも、 2つの異なる関数を作成する必要があります 1つはアクションを実行するためのもの、もう1つはユーザーをログインさせるべきというメッセージを返すためだけのものですか?

add_action('wp_ajax_nopriv_test-action', 'take_action_function');
add_action('wp_ajax_test-action', 'take_action_function');

function take_action_function(){
    if ( is_user_logged_in() ){
       echo "success";
       die;
    } else {
        echo "not logged";
        die;
    }
}
1
enam

それはまさにあなたがやりたいことによります。短いメッセージだけを表示したい場合は、両方に同じコールバックを使用してください。

しかし、完全に異なるオブジェクトが必要で、ログインステータスに応じて異なる追加ファイルを読み込む場合は、別々のコールバックを使用してください。

基本的な例、おそらく推奨される実装ではありません。 :)

class Ajax_Controller {

    public function __construct( $action ) {

        add_action( "wp_ajax_nopriv_$action", array ( $this, 'logged_out' ) );
        add_action( "wp_ajax_$action",        array ( $this, 'logged_in' ) );
    }

    public function logged_out() {

        require_once __DIR__ . '/Logged_Out_Data_Interface.php';
        require_once __DIR__ . '/Logged_Out_Data.php';
        require_once __DIR__ . '/Logged_Out_View.php';

        $data = new Logged_Out_Data;
        $view = new Logged_Out_View( $data );
        $view->render();
    }

    public function logged_in() {

        require_once __DIR__ . '/Logged_In_Data_Interface.php';
        require_once __DIR__ . '/Logged_In_Data.php';
        require_once __DIR__ . '/Logged_In_View.php';

        $data = new Logged_In_Data;
        $view = new Logged_In_View( $data );
        $view->render();
    }
}

あなたのユースケースを見て、実用的にしてください。疑問がある場合は、両方のアプローチのパフォーマンスと複雑さを比較してください。

3
fuxia