sql >> Databáze >  >> RDS >> Mysql

wordpress posts_orderby filtr s vlastní tabulkou v pluginu

Dobře, vyřešil jsem to.

Problém je v tom, že dotaz na příspěvek nezahrnuje tabulku postmeta, takže jsem ji přidal do custom_join funkce, jako je tato:

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

Přidal jsem také posts_groupby filtr, protože nový dotaz mi dal duplicitní příspěvky (spousta duplicitních příspěvků).

Zde je kód:

add_filter('posts_groupby','custom_groupby');

function custom_groupby($groupby){
    global $wpdb;

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

    return $groupby;
}

Vše se zapisuje do souboru pluginu, ale můžete zapisovat i do function.php soubor vašeho motivu.

Nezapomeňte zahrnout if(!is_admin) Pokud chcete zobrazit vlastní dotaz pouze na přední straně.




  1. Jak anotovat pole automatického přírůstku MYSQL pomocí anotací JPA

  2. Co hledat, pokud vaše replikace PostgreSQL zaostává

  3. Funkce mySQL str_to_date() vrací chybu

  4. MariaDB JSON_DETAILED() Vysvětleno