sql >> Database >  >> RDS >> Mysql

wordpress posts_orderby filter met aangepaste tabel in plug-in

Oké, ik heb het opgelost.

Het probleem is dat de post-query de postmeta-tabel niet bevat, dus ik heb deze toegevoegd aan de custom_join functie, zoals deze:

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

Ik heb ook de posts_groupby . toegevoegd filter omdat de nieuwe zoekopdracht me dubbele berichten opleverde (veel dubbele berichten).

Hier is de code:

add_filter('posts_groupby','custom_groupby');

function custom_groupby($groupby){
    global $wpdb;

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

    return $groupby;
}

Alles is geschreven in het plug-inbestand, maar je kunt ook schrijven in de function.php bestand van uw thema.

Vergeet niet om de if(!is_admin) . op te nemen statement als u de aangepaste zoekopdracht alleen . wilt zien aan de voorkant.




  1. Kan geen verbinding maken met lokale PostgreSQL

  2. MYSQL en RDBMS

  3. php/mysql. Is er een mysql-functie om te detecteren of er ten minste 2 bepaalde woorden in ten minste één mysql-rijveld voorkomen?

  4. Laatst bijgewerkte rij-ID in Mysql