Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

wordpress posts_orderby filter dengan tabel khusus di plugin

Oke, saya menyelesaikannya.

Masalahnya adalah bahwa kueri posting tidak menyertakan tabel postmeta, jadi saya menambahkannya di custom_join fungsinya, seperti ini:

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;
}

Saya juga menambahkan posts_groupby filter karena kueri baru memberi saya kiriman duplikat (banyak kiriman duplikat).

Ini kodenya:

add_filter('posts_groupby','custom_groupby');

function custom_groupby($groupby){
    global $wpdb;

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

    return $groupby;
}

Semuanya ditulis dalam file plugin, tetapi Anda juga dapat menulis di function.php file tema Anda.

Ingatlah untuk menyertakan if(!is_admin) pernyataan jika Anda ingin melihat kueri khusus hanya di ujung depan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa panjang baris AVG 4 kali lebih besar dari yang diharapkan?

  2. Paksa MySQL untuk mengembalikan duplikat dari klausa WHERE IN tanpa menggunakan JOIN/UNION?

  3. Hubungkan ke mysql dalam wadah buruh pelabuhan dari Host

  4. Menghubungkan tabel ketiga ke tabel jembatan dalam asosiasi banyak ke banyak

  5. Transpose Baris ke Header di MYSQL