SQL error with custom query

时间:2010-11-27 作者:wpStudent

我正在尝试创建一个自定义帖子查询,用于对投票结果为“竖起大拇指”的帖子进行排序。

我将我的自定义“wp\\u post\\u投票”表(存储每个帖子收到的投票数)与默认的“wp\\u posts”表合并并显示帖子WHERE votes > 1.

WHERE原因导致SQL错误。当我移除posts_where 过滤器我没有收到任何错误,但我的所有帖子都会显示出来,无论它们的投票数是多少。

    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...
我在索引中得到的SQL错误是。。

WordPress数据库错误:[]选择t,tt从wp\\u terms AS t内部连接wp\\u term\\u分类法AS tt ON tt。term\\u id=t.term\\u id内部将wp\\u term\\u关系连接为tr ON tr.term\\u taxonomy\\u id=tt。term\\u taxonomy\\u id,其中tt。按t.name ASC排序(\'category\')中的分类法和(0)中的tr.object\\u id

..在我的侧边栏中,我有一个最近发布的小部件。我通过$wpdb->show_errors();

WordPress数据库错误:[您的SQL语法有错误;请查看与您的MySQL server版本相对应的手册,以了解可在第1行使用的接近“投票>1 ORDER BY wp\\u posts.post\\u date DESC LIMIT 0,5”的正确语法]选择SQL\\u CALC\\u FOUND\\u ROWS wp\\u posts。*从wp\\u posts左侧加入wp\\u vote\\u posts ON wp\\u posts。ID=wp\\U vote\\U posts。vote\\u post\\u id,其中1=1按wp\\u posts投票>1顺序。post\\u日期描述限制0,5

我注意到了WHERE 1=1 voted > 1.. 不确定这是否导致了错误以及如何修复。

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

应该是:

$where .= " AND voted > 1";
其他注意事项:

应使用硬编码表名,而不是硬编码表名$wpdb->prefix . \'post_votes\';

代替签入全局$_GET 您应该声明过滤器接受两个参数和相应的代码函数,这些过滤器作为包含所有查询数据的第二个参数对象传递。

类似于:

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

结束

相关推荐

通过主题删除页脚中输入的有问题的PHP代码

我的一个朋友有一个使用Theisis主题的WordPress网站。最近,他通过主题向页脚添加了一些有问题的PHP代码(而不是PHP文件)。PHP代码出错,导致站点出现WSOD(白屏死亡)。因为每个页面上都有页脚,所以他无法重新删除PHP代码来修复站点。我对WordPress不太熟悉(我自己主要使用Drupal),所以我不能百分之百确定如何帮助他。我猜PHP代码片段存储在数据库中,需要手动从数据库中删除。但我对WordPress模式不太了解。有人能给我指出正确的方向吗?该代码将存储在数据库中的什么位置,以便