janochen
  • 0
Мастер

Плагин или тема, которые сортируют сообщения как «лучшие в этом году» и «лучшие в прошлом месяце»?

  • 0

Есть ли бесплатный плагин или тема для WordPress, которые сортируют посты как «лучшие в этом году» и «лучшие в прошлом месяце» или «лучшие за 24 часа» на основе голосования?

Я использую плагин Vote It Up прямо сейчас. Но у него нет возможности сортировать сообщения как цикл.

Какие-либо предложения?

Share
  1. Попробуйте GD Star Rating — я почти уверен, что он хранит время голосования и поэтому может быть использован для этого — вам, вероятно, придется самостоятельно извлекать порядок.

    http://www.gdstarrating.com/

    • 0
  2. Пока плагин не переключится на хранение голосов по-другому, не будет хорошего способа сортировки на основе голосов.

    Взгляните на строку из таблицы голосов.

    +-------------------------------------------------------+
    | ID | post |  votes  | guests | usersinks | guestsinks |
    +-------------------------------------------------------+
    | 1  | 1234 | ,1,2,3  |        |           |            |
    +-------------------------------------------------------+
    

    Все голоса пользователей хранятся в единственном столбце (голоса), и MySQL не имеет надлежащего способа разделения, подсчета и упорядочения на основе этого столбца.

    Возможно, какой-нибудь ниндзя MySQL сможет создать для этого процедуру/функцию, но это выходит за рамки моего ноу-хау в SQL.

    Не уверен, почему автор решил хранить голоса таким образом, но с точки зрения сортировки результатов это плохое решение для проектирования БД (imo).

    Я ценю, что на самом деле не затронул этот вопрос, но подумал, что было бы неплохо указать, что, хотя это может быть что-то простое в теории, есть веская причина, по которой автор еще не предоставил эту возможность с плагином — его БД дизайн делает сортировку на основе голосования чрезвычайно сложной (по крайней мере, на уровне SQL).

    Это то, что я бы сделал, если бы писал такой плагин.

    Используйте одну новую таблицу для хранения только голосов, всех голосов.

    Вот некоторые мнимые данные в таблице.

    Table: wp_post_votes
    Type: new
    +--------------------------------------------+
    |  ID    |  post_id |  user_id  |  type      |
    +--------------------------------------------+
    |  1     |  123     |   10      |  up        |
    |  2     |  123     |   22      |  down      |
    |  3     |  123     |   4       |  up        |
    |  4     |  123     |   1       |  up        |
    |  5     |  25      |   6       |  up        |
    |  6     |  25      |   10      |  up        |
    |  7     |  25      |   1       |  down      |
    |  8     |  25      |   2       |  up        |
    +--------------------------------------------+
    

    Наряду с этим я бы использовал usermeta и postmeta для хранения подсчета голосов как для сообщений, так и для голосовавших пользователей.

    Вот некоторые воображаемые метаданные, которые помогут визуализировать.

    Table: wp_postmeta
    Type: core, existing
    +-----------------------------------------------------------+
    |  meta_id  |  post_id   |   meta_key   |   meta_value      |
    +-----------------------------------------------------------+
    |  512      |   123      |  vote_count  |        4          |
    |  513      |   25       |  vote_count  |        4          |
    +-----------------------------------------------------------+
    
    Table: wp_usermeta
    Type: core, existing
    +-----------------------------------------------------------+
    |  umeta_id  |  user_id  |  meta_key   |  meta_value        |
    +-----------------------------------------------------------+
    |  443       |   1       |  vote_count |       2            |
    |  445       |   2       |  vote_count |       1            |
    |  442       |   4       |  vote_count |       1            |
    |  444       |   6       |  vote_count |       1            |
    |  440       |   10      |  vote_count |       2            |
    |  441       |   22      |  vote_count |       1            |
    +-----------------------------------------------------------+
    

    Таким образом, сообщения можно было бы сортировать на основе мета-значения, а дополнительное использование мета-таблиц означало бы быстрый доступ к функциям обновления и извлечения, таким как get_user_meta, get_post_meta, update_post_meta … и т. д. (я уверен, что вы поняли).

    Просто мысли вслух, потому что ваш вопрос заставил меня задуматься о том, как бы я сделал это по-другому..

    • 0

Оставить ответ

You must login to add an answer.