sql >> Databasteknik >  >> RDS >> Mysql

wordpress posts_orderby-filter med anpassad tabell i plugin

Ok, jag löste det.

Problemet är att postfrågan inte inkluderar postmetatabellen, så jag lade till den på custom_join funktion, så här:

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

Jag lade också till posts_groupby filter eftersom den nya frågan gav mig dubblerade inlägg (många dubblerade inlägg).

Här är koden:

add_filter('posts_groupby','custom_groupby');

function custom_groupby($groupby){
    global $wpdb;

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

    return $groupby;
}

Allt skrivs i plugin-filen, men du kan också skriva i function.php fil med ditt tema.

Kom ihåg att inkludera if(!is_admin) uttalande om du vill se den anpassade frågan endast på fronten.




  1. Hur man delar upp mySQL-information för att visa i HTML-kolumner

  2. Hur man aktiverar Change Data Capture (CDC) på hela tabellen ELLER aktiverar CDC på bordet med lista över kolumner i SQL Server

  3. Bra idé/dålig idé? Använder du MySQL RAND() utanför en liten uppsättning delfrågeresultat?

  4. Viloläge stryper saknade rader när du hanterar en äldre databas