2017-04-18 154 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文件中。 –