Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Bộ lọc wordpress posts_orderby với bảng tùy chỉnh trong plugin

Được rồi, tôi đã giải quyết được.

Vấn đề là truy vấn bài đăng không bao gồm bảng postmeta, vì vậy tôi đã thêm nó vào custom_join chức năng, như thế này:

add_filter('posts_join','custom_join');
add_filter('posts_orderby','custom_orderby');

function custom_join($join){
    global $wpdb;
    $customTable = $wpdb->prefix."custom_table";

    if(!is_admin){
        $join .= "LEFT JOIN $wpdb->postmeta p1 ON $wpdb->posts.ID = p1.post_id";
        $join .= "LEFT JOIN $customTable p2 ON p1.meta_value = p2.slug";
    }

    return $join;
}

function custom_orderby($orderby_statement){
    global $wpdb;

    if(!is_admin){
        $orderby_statement = "p2.price DESC, $wpdb->posts.post_date DESC";
    }

    return $orderby_statement;
}

Tôi cũng đã thêm posts_groupby lọc vì truy vấn mới đã cho tôi các bài đăng trùng lặp (rất nhiều bài viết trùng lặp).

Đây là mã:

add_filter('posts_groupby','custom_groupby');

function custom_groupby($groupby){
    global $wpdb;

    if(!is_admin){
       $groupby = "$wpdb->posts.ID";
    }

    return $groupby;
}

Mọi thứ đều được viết trong tệp plugin, nhưng bạn cũng có thể viết trong function.php tệp chủ đề của bạn.

Hãy nhớ bao gồm if(!is_admin) nếu bạn muốn xem truy vấn tùy chỉnh chỉ trên giao diện người dùng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql + php với các ký tự đặc biệt như '(Apostrophe) và (Dấu ngoặc kép)

  2. MySQL A hoặc B nhưng KHÔNG phải cả hai

  3. MySql:Cấp các tùy chọn chỉ đọc?

  4. Số lượng bảng tham gia tối đa trong MariaDB là bao nhiêu?

  5. cách khóa một số hàng vì chúng không được chọn trong giao dịch khác