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;
}
}
それはまさにあなたがやりたいことによります。短いメッセージだけを表示したい場合は、両方に同じコールバックを使用してください。
しかし、完全に異なるオブジェクトが必要で、ログインステータスに応じて異なる追加ファイルを読み込む場合は、別々のコールバックを使用してください。
基本的な例、おそらく推奨される実装ではありません。 :)
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();
}
}
あなたのユースケースを見て、実用的にしてください。疑問がある場合は、両方のアプローチのパフォーマンスと複雑さを比較してください。