問題描述

我想顯示給定價格範圍內的所有帖子。例如:當使用者輸入 100 和 1000(兩個單獨的表單欄位) 時 – 我的站點將顯示所有具有名為 price 的自定義欄位的帖子,其數值在 100 到 1000 之間。

在 WP Query 的檔案中找到這個; 但是,我不確定我如何根據 WordPress 網站上的表單的輸入建立查詢。

$args = array(
'post_type' => 'product',
'meta_query' => array(
    array(
        'key' => 'color',
        'value' => 'blue',
        'compare' => 'NOT LIKE'
    ),
    array(
        'key' => 'price',
        'value' => array( 20, 100 ),
        'type' => 'numeric',
        'compare' => 'BETWEEN'
    )
)
);
$query = new WP_Query( $args );

感謝您的時間。

最佳解決思路

使用 pre_get_posts 操作來檢測 URL 中的一些過濾器變數,並相應地過濾查詢。

例如,說你的表單設定 price_lowprice_high GET vars,所以 URL 看起來像:

domain.com/?price_low=100&price_high=1000

然後,您的過濾器功能將檢查是否存在這些變數,並建立 meta_query 。此示例檢查是否是主頁上的主要查詢,請參閱 Conditional Tags 頁面,瞭解如何檢查其他型別的查詢是否發生,如類別或標籤等。

function wpa_filter_home_query( $query ){
    if( $query->is_home()
    && $query->is_main_query()
    && isset( $_GET['price_low'] )
    && isset( $_GET['price_high'] ) ) {
        $meta_query = array(
            array(
                'key' => 'price',
                'value' => array( $_GET['price_low'], $_GET['price_high'] ),
                'type' => 'numeric',
                'compare' => 'BETWEEN'
            )
        );
        $query->set( 'meta_query', $meta_query );
    }
}
add_action( 'pre_get_posts', 'wpa_filter_home_query' );

編輯 – 提交值的簡單形式的例子。省略 action 屬性將表單提交到當前頁面。

<form method="GET">
    <input type="text" name="price_low">
    <input type="text" name="price_high">
    <input type="submit">
</form>

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。