2017-04-18 156 views
0

我正在使用Wordpress插件来为我的网站创建用户,我需要检查用户是否登录,然后执行jQuery功能中的某些内容。该插件声明他们为这些事情设置了公共职能。我不确定是否设置正确,用户是否登录或登出“登出”。公共职能是在我的主题我的functions.php文件是:获取PHP函数信息使用jquery

function loggedin() { 
    $FEUP = new FEUP_User; 
    if ($FEUP->Is_Logged_In()) { 
     echo "loggedin"; 
    } else { 
     echo "loggedout"; 
    } 
} 

我jQuery的功能是:

var user = "<?php loggedin(); ?>"; 
if(user == "loggedin") { 
    console.log("user is logged in"); 
}else { 
    console.log("user is logged out"); 
} 

这是从插件的制造者截图为如何实现公共函数来查看用户是否已登录:enter image description here

+0

,如果你提供了什么是错的告诉你代码中的一些想法这将是很好。 – RiggsFolly

+0

'var user =“'<?php loggedin();?>';”;'字符串必须用引号括起来! – RiggsFolly

+0

你有什么理论上应该很好。如果你显示PHP代码的实际输出将会更有帮助,因为它不等于“loggedin” –

回答

1

你可能会考虑使用wp_localize_script()来确保你的javascript变量被输出到jQuery代码可以看到的地方。

下面是一个例子。这将是你的php插件代码来排队的jQuery的文件:

wp_enqueue_script('my-script-handle', plugins_url('/whatever_location/myscript.js', __FILE__), array('jquery')); 

您可以从PHP使用wp_localize_script()功能则添加JavaScript的变量,这将输出脚本标签中的变量在您的脚本可以使用它们:

wp_localize_script('my-script-handle','my_plugin_vars', array('logged_status' => 'some_value')); 

总之它可能看起来像这样:

PHP:

$FEUP = new FEUP_User; 
$logged_status = $FEUP->Is_Logged_In() ? 'loggedin' : 'notloggedin'; 

wp_enqueue_script('my-script-handle', plugins_url('/whatever_location/myscript.js', __FILE__), array('jquery')); 
wp_localize_script('my-script-handle','my_plugin_vars', array('logged_status' => $logged_status)); 

JS:

if(my_plugin_vars.logged_status == 'loggedin') { 
    console.log("user is logged in"); 
} else { 
    console.log("user is logged out"); 
} 
+0

这确实奏效,但我得到一个“GET http://xxxx.com/wp-content/plugins/home/dmipar5/public_html/xxxx.com/wp-content/themes/xxxxxxxx/js/dmi.js?ver = 4.7.3 404(未找到)“在我的控制台中(我把xxx的名字叫做)。我应该填写'my-script-handle'或'my_plugin_vars'的内容吗? –

+0

它看起来像dmi.js排队不正确。 dmi.js是您用于上述问题的JavaScript文件吗? –

+0

是的,这是我的JavaScript文件,我有你在建议的JS。 –

0

如果您正在生成PHP脚本中的所有代码,即变量赋值AND实际的JavaScript代码,则应该可以工作。

<?php 
function loggedin() { 
    $FEUP = new FEUP_User; 
    if ($FEUP->Is_Logged_In()) { 
     return 'true'; 
    } else { 
     return 'false'; 
    } 
} 

echo '<script type="text/javascript">'; 
echo 'var user = <?php echo loggedin(); ?>;'; 
echo 'if(user) { 
     console.log("user is logged in"); 
     }else { 
     console.log("user is logged out"); 
     }'; 
echo '</script>'; 
?> 

或者,如果你的JavaScript是seperately保持那么所有你需要做的是输出设置变量

<?php 
function loggedin() { 
    $FEUP = new FEUP_User; 
    if ($FEUP->Is_Logged_In()) { 
     return 'true'; 
    } else { 
     return 'false'; 
    } 
} 

echo '<script type="text/javascript">'; 
echo 'var user = <?php echo loggedin(); ?>;'; 
echo '</script>'; 

但你的JavaScript测试这个变量的JavaScript不得,直到变量赋值片运行的JavaScript已经执行并将该变量加载到全局名称空间中。

从你的代码示例中,很难准确地看到这些可能性中的哪一个符合你的实际情况。

+0

我试了两次,我仍然得到相同的结果,如果我做的顶部的例子,我总是得到“用户登录”和底部的例子,我总是得到“用户注销”。我把php放在我的wordpress主题的header.php文件中。 –