簡體   English   中英

在 Wordpress 頁面或帖子中使用 URL 查詢字符串變量

[英]Using a URL query string variable in a Wordpress page or post

我想在 WordPress 頁面(不是模板文件,而是頁面本身)中訪問和使用 URL 中傳遞的變量。

這就是我想要完成的事情。 我想創建一個單獨的頁面,該頁面將通過使用在 URL 中的短代碼和頁面其他位置傳遞的文本來顯示不同的 WP 內容。 因此,如果 URL 被指定為:

www.greenneedham.org/blog/topicpage/?topic=solar

我將能夠在頁面中的簡碼和其他位置使用傳遞的文本('solar'),如下所示:

[documents category_name="solar" numberposts="-1" orderby="title" order="ASC"]

理想情況下,我希望能夠創建一個可以在頁面文本中簡單使用的變量或字段。 我只是不知道如何做到這一點。

這是我考慮過/嘗試過的:

1)有些插件可以訪問傳遞的變量(例如 URL 參數),但這似乎需要嵌套的短代碼:

[documents category_name="[urlparam param="topic" default="home-energy-savings"/]" numberposts="-1" orderby="title" order="ASC"]

那是行不通的,我不知道有什么方法可以做到這一點。

補充: http://codex.wordpress.org/Shortcode_API#Square_Brackets中的簡碼 API 文檔說明簡碼解析器無法處理方括號屬性。 不幸的是,這正是我想要做的。

如果這不起作用,那么現在的問題是 - 在頁面內容中是否有某種方法可以顯示已根據查詢變量修改的短代碼字符串?
結束添加

2) 使用過濾器添加變量允許我訪問頁面模板(例如 page.php)中的變量,但我想在頁面本身中使用該值。

3) 允許在頁面或帖子中使用 PHP 片段的插件。 這似乎是普遍不鼓勵的。 它也很復雜,並且頁面本身(可能由非編碼人員使用)將難以使用。

任何幫助或指導將不勝感激。 謝謝

add_shortcode('cat', 'get_name');

函數 get_name() {

返回 '​​[category_name='.$_GET['topic'].' numberposts="-1" orderby="title" order="ASC"]';

}

或 echo do_shortcode('[category_name='.$_GET['topic'].' numberposts="-1" orderby="title" order="ASC"]'); // 而不是返回。

應該作為片段功能工作。 然后將其用作 [cat] 短代碼

另外,記得清理你的 $_GET 變量。 這是一個簡單短代碼上下文中的示例,用於在頁面文本中顯示查詢變量,參考我從何處獲取清理代碼:

//[query_string label="" class="" var=""] shortcode
function query_string_shortcode( $atts, $content = null ) {

//Create an array of default values for attributes. These don't have to be blank. If specified as attributes in the shortcode, those values will be used instead.
$a = shortcode_atts( array(
    'label' => '',
    'class' => '',
    'var' => '',
), $atts );

//Create variables from atts/defaults
$label = $a['label'];
$class = $a['class'];
/*
* 1. Check if the variable is set
* 2. If so, sanitize the input for security (https://wordpress.stackexchange.com/questions/351292/sanitize-get-query-var-url-parameters)
* 3. Set the variable
*/
$var = ( isset( $_GET[$a['var']] ) ) ? sanitize_text_field( $_GET[$a['var']] ) : '';

if(!empty($label)) { 
    $label = "<b>$label</b>";
}

if(!empty($var)) { 
    $html = '<span class="pt-query ' . $class . '">' . $label . $var . '</span>';
    return $html;
}

return;
}

add_shortcode( 'query_string', 'query_string_shortcode' );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM