首頁>Web>source

我的客戶的網站有一个博客類別和许多产品類別.她希望搜尋結果包括博客文章,但要先發佈产品文章。

我可以看到两个主要的實現選項

  1. 在functions.php中更改搜尋查詢
  2. 在search.php模板檔案中對搜尋查詢結果进行排序

我的問题是:是否有人實施了此任務,您使用了哪種實施方法,並且在此過程中遇到了什麼問题?

我已经搜尋了這種情况的答案,然後空了出来。

最新回復
  • 6月前
    1 #

    如果我是你,我可能会使用 posts_search_orderby 钩子来改變搜尋 ORDER BY 子句,因為這樣,排序可以具有分頁功能

    例如,在您的情况下,您希望按帖子型別进行排序,如下所示:(好吧,如果"产品帖子"的帖子型別不同?)

    // In functions.php:
    add_filter( 'posts_search_orderby', 'my_posts_search_orderby', 10, 2 );
    function my_posts_search_orderby( $orderby, $query ) {
        if ( $query->is_main_query() && is_search() ) {
            global $wpdb;
            $orderby = "{$wpdb->posts}.post_type";
        }
        return $orderby;
    }
    

    但是,如果您只希望在同一頁面上进行排序,則可以使用第二个選項,例如使用本地 usort()strcmp() PHP中的功能:

    // In functions.php:
    add_filter( 'the_posts', 'my_the_posts', 10, 2 );
    function my_the_posts( $posts, $query ) {
        if ( $query->is_main_query() && is_search() ) {
            usort( $posts, function ( $a, $b ) {
                return strcmp( $a->post_type, $b->post_type ); // A-Z (ASCending)
    //          return strcmp( $b->post_type, $a->post_type ); // Z-A (DESCending)
            } );
        }
        return $posts;
    }
    

    但是,使用了 the_posts 掛钩而不是修改搜尋結果模板,但要點是,在檢索到帖子後手動进行排序. :)

    如果您實際上打算按帖子類別进行排序,那麼這可能不是您的解決方案,但是可以使用相同的概念(或掛钩)。

  • wordpress:在PHP中執行簡碼
  • apache:Mod重寫多个查詢字元串