Frage

Ich versuche, eine benutzerdefinierte Post -Abfrage zum Sortieren von Posts zu erstellen, die "Daumen hoch" gewählt wurden.

Ich schließe mich meiner Tabelle "WP_POST_VOTES" (in der die Anzahl der Stimmen, die jeweils empfangen werden, mit der Standardtabelle "WP_POSTS" und Anzeigen von Posts bei WHERE votes > 1.

Die Where -Ursache verursacht einen SQL -Fehler. Wenn ich das entferne posts_where Filter Ich bekomme keine Fehler, aber alle meine Beiträge werden unabhängig von ihrer Stimmennummer angezeigt.

    add_filter('posts_join', 'vote_join' );
    add_filter('posts_where', 'vote_where' );

    function vp_join( $join )
    {

      global $wpdb;

      if (isset($_GET['vote_sort'])) { //when visitor browses voted posts
        $join .= " LEFT JOIN wp_post_votes ON " . 
           $wpdb->posts . ".ID = wp_vote_posts.vote_post_id ";
      }

      return $join;
    }

    function vp_where( $where )
    {
      if (isset($_GET['vp_sort'])) {
        $where = "voted > 1";
       }

      return $where;
    }

//custom permalinks code follows...

Der SQL -Fehler, den ich in den Index bekomme, ist ..

WordPress -Datenbankfehler: [] Wählen Sie t., tt. Aus WP_TERMS als innerer Join wp_term_taxonomy als tt auf tt.term_id = t.term_id innere join wp_term_relationships as TR auf tr.term_taxonomy_id = tt.term_taxonomy_id, wobei tt.taxonomy in ('category') und tr.objekt_ID in (0) Ordnung durch (0) -Hege in (0) -Hege von (0) ordentlich in (0) Ordnung durch ('category') und tr.objep () in (0) Ordnung durch durch (0) ordnen (0) ordentlich in (0) ordentlich in (0) ordentlich in (0) ordentlich in (0) ordentlich in (0) ordnen in (0) ordentlich in (0) ordentlich in (0) ordnen in ('category') und tr.Objep (0) ordig T.Name ASC

..und in meiner Seitenleiste habe ich ein aktuelles Post -Widget. Dort $wpdb->show_errors();

WordPress -Datenbankfehler: [Sie haben einen Fehler in Ihrer SQL -Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL -Serverversion entspricht, damit die rechte Syntax in der Nähe von 'VODE> 1 Bestellung von wp_posts.post_date Desc Limit 0, 5' in Zeile 1] Wählen Sie SQL_CALC_FOUND_ROWS WP_POSTS. = wp_vote_posts.vote_post_id wobei 1 = 1 abgestimmt> 1 Reihenfolge nach wp_posts.post_date Desc Limit 0, 5

mir ist aufgefallen WHERE 1=1 voted > 1Ich bin mir nicht sicher, ob das den Fehler verursacht und wie er behoben werden soll.

War es hilfreich?

Lösung

Sollte sein:

$where .= " AND voted > 1";

Weitere Hinweise:

  • Anstelle von Hardcoding -Tabellennamen sollten Sie verwenden $wpdb->prefix . 'post_votes';

  • Anstatt sich auf global zu überprüfen $_GET Sie sollten Ihre Filter als das Akzeptieren von zwei Argumenten und Codefunktionen entsprechend erklären. Diese Filter bestehen als zweites Argumentobjekt, das alle Abfragedaten enthält.

Wie:

add_filter('posts_where', 'vote_where', 10, 2 );

function vote_where( $where, $query ) {

    if( isset( $query->query_vars['vp_sort'] ) );
        $where .= ' AND voted > 1';

    return $where;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top