問題描述

我無法嘗試將 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 varsquery_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。