我在我的网站上有一个前端ajax登录。我想将重定向url设置为\'/services/clientarea\';
对于每个不属于博客的页面。对于博客页面,我希望登录重定向为$_SERVER[\'REQUEST_URI\'];
以下是我正在使用的代码,它对我不起作用:
function ajax_login_init(){
wp_register_script(\'ajax-login-script\', get_template_directory_uri() . \'/library/js/ajax-login-script.js\', array(\'jquery\') );
wp_enqueue_script(\'ajax-login-script\');
global $post;
$posttype = get_post_type($post);
if ($posttype == \'post\') {
$loginredirect = $_SERVER[\'REQUEST_URI\'];
} else {
$loginredirect = \'/services/clientarea\';
}
wp_localize_script( \'ajax-login-script\', \'ajax_login_object\', array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'redirecturl\' => $loginredirect,
\'loadingmessage\' => __(\'Signing in, please wait...\')
));
// Enable the user with no privileges to run ajax_login() in AJAX
add_action( \'wp_ajax_nopriv_ajaxlogin\', \'ajax_login\' );
}
// Execute the action only if the user isn\'t logged in
if (!is_user_logged_in()) {
add_action(\'init\', \'ajax_login_init\');
}
似乎在init钩子中没有加载post类型。有什么方法可以识别它吗?
SO网友:chifliiiii
而@krzysiekAnswer 是获取文件时要遵循的正确方法,请不要回答如何在init hook获取post类型的原始问题,因此我将在这里发布解决方案,以防任何人需要它。
基本上,您无法在该挂钩处访问post变量,因此需要使用url来获取它。这个url_to_postid() 是您需要使用的函数,您可以执行以下操作:
$actual_url = (isset($_SERVER[\'HTTPS\']) && $_SERVER[\'HTTPS\'] == \'on\' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$post_id = url_to_postid($actual_url);
$post_type = get_post_type( $post_id );
这只是一个解决方案,以防您需要它,但最好从设置变量的wp挂钩开始。