Mysql
 sql >> база данни >  >> RDS >> Mysql

wordpress posts_orderby филтър с персонализирана таблица в плъгин

Добре, реших го.

Проблемът е, че заявката за публикация не включва таблицата postmeta, така че я добавих в custom_join функция, като тази:

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

Добавих също posts_groupby филтър, защото новата заявка ми даде дублирани публикации (много дублирани публикации).

Ето кода:

add_filter('posts_groupby','custom_groupby');

function custom_groupby($groupby){
    global $wpdb;

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

    return $groupby;
}

Всичко е написано във файла на плъгина, но можете да пишете и в function.php файл на вашата тема.

Не забравяйте да включите if(!is_admin) изявление, ако искате да видите персонализираната заявка само на предния край.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Присъединете няколко колони от една таблица към една колона от друга таблица

  2. Как да изберете всички редове HTML таблица

  3. NHibernate MappingException:няма персистер за байт[]

  4. Задаване на паролата за root на MySQL на OS X

  5. Как да получите най-новите 2 артикула на категория в един избор (с mysql)