問題描述
我無法嘗試將 url 中的額外變數傳遞給我的 wordpress 安裝。
例如/news?c=123
由於某些原因,它僅在網站根 www.example.com?c=123 上起作用,但如果該 URL 包含任何更多資訊 www.example.com/news?c=123,則它不起作用。我的主題目錄中的 functions.php 檔案中有以下程式碼。
if (isset($_GET['c']))
{
setcookie("cCookie", $_GET['c']);
}
if (isset($_SERVER['HTTP_REFERER']))
{
setcookie("rCookie", $_SERVER['HTTP_REFERER']);
}
有任何想法嗎?
最佳解決方案
解決這個問題的方法很少。首先你可以去一個外掛,如果你想要的:
或者手動編碼,看看這篇文章:
還檢視:
-
add_query_arg
次佳解決方案
為了使”front-end”(在 wp-admin 上下文中不起作用) 的 「WordPress 方式」,您需要使用 3 個 WordPress 功能:
-
add_query_arg() – 使用新的查詢變數建立 URL(在您的示例中為’c’)
-
query_vars 過濾器 – 修改 WordPress 知道的 public query variables 的列表 (這僅適用於 front-end,因為 WP Query 不在後端使用 –
wp-admin),因此在admin-ajax中也不可用) -
get_query_var() – 檢索您的 URL 中傳遞的自定義查詢變數的值。
注意:如果你這樣做,沒有必要甚至觸控超級桌面 ($_GET) 。
例子
在需要建立連結/設定查詢變數的頁面上:
如果它是一個返回此頁面的連結,只需新增查詢變數
<a href="<?php%20echo%20esc_url(%20add_query_arg(%20'c',%20$my_value_for_c%20)%20)?>">
如果它是一個其他頁面的連結
<a href="<?php%20echo%20esc_url(%20add_query_arg(%20'c',%20$my_value_for_c,%20site_url(%20'/some_other_page/'%20)%20)%20)?>">
在你的 functions.php,或一些外掛檔案或自定義類 (僅限 front-end):
function add_custom_query_var( $vars ){
$vars[] = "c";
return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );
在您要檢索的頁面/函式上,並使用 URL 中的查詢 var set:
$my_c = get_query_var( 'c' );
在後端 (wp-admin)
在後端我們沒有執行 wp(),所以主要的 WP Query 不能執行。因此,沒有 query vars,query_vars 鉤子沒有執行。
在這種情況下,您需要恢復更準確的檢查 $_GET 超全球的方法。最好的辦法是:
$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );
雖然在一個捏,你可以做的嘗試和真實
$my_c = isset( $_GET['c'] ? $_GET['c'] : "";
或其一些變體。
第三種解決方案
在 function.php 中新增以下程式碼
add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{
$vars[] = 'var1'; // var1 is the name of variable you want to add
return $vars;
}
那麼你將能夠使用 $ _GET [‘var1’]
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。