sql >> Database teknologi >  >> RDS >> Mysql

wordpress posts_orderby filter med tilpasset tabel i plugin

Ok, jeg løste det.

Problemet er, at post-forespørgslen ikke inkluderer postmeta-tabellen, så jeg tilføjede den på custom_join funktion, som denne:

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

Jeg tilføjede også posts_groupby filter, fordi den nye forespørgsel gav mig duplikerede indlæg (masser af duplikerede indlæg).

Her er koden:

add_filter('posts_groupby','custom_groupby');

function custom_groupby($groupby){
    global $wpdb;

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

    return $groupby;
}

Alt er skrevet i plugin-filen, men du kan også skrive i function.php fil med dit tema.

Husk at inkludere if(!is_admin) erklæring, hvis du ønsker at se den tilpassede forespørgsel kun på forsiden.




  1. spring tabeller over, når du kører Doctrine convert-mapping

  2. PHP-dato('W') vs MySQL YEARWEEK(nu())

  3. COSH() Funktion i Oracle

  4. MySQL Vælg Where In Many to Many