【问题标题】:Wordpress - Fatal error: Call to a member function get_var() on a non-object $wpdbWordpress - 致命错误:在非对象 $wpdb 上调用成员函数 get_var()
【发布时间】:2013-03-11 00:56:09
【问题描述】:

[Solution by s_ha_dum on http://wordpress.stackexchange.com]

我正在尝试根据在帖子设置中输入的密码将用户引导至某个帖子。我有几乎可以工作的代码:

页面上的表单:

<form method="post" action="">
  <input type="password" name="passwordfield">
  <input type="hidden" name="homepagepassword" value="1">
  <input type="submit" value="Submit">
</form>

functions.php 中的代码

function doPasswordStuff(){
    if(isset($_POST['homepagepassword'])){
    $post_password = $_POST['passwordfield'];
    $post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %s", $post_password) );
    $q = new WP_Query( 'p=$post_id' );
    if($q->have_posts()){
        while($q->have_posts()){
            $q->the_post();
            wp_redirect(get_permalink());
            die();
        }
    } else {
        // oh dear, there isnt a post with this 'password', put a redirect to a fallback here
        wp_redirect('http://www.google.com');
        die();
    }
    wp_reset_query();
    }
}
add_action('init','doPasswordStuff');

但是我在这一行遇到致命错误(致命错误:调用非对象上的成员函数 get_var()):

$post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %d", $post_password) );

如果有人愿意看一下真的很感激:)谢谢!

【问题讨论】:

  • 你能分享一下错误吗
  • 对不起,我刚刚在这里编辑了帖子:致命错误:在非对象上调用成员函数 get_var())
  • 你是否全球化了 wpdb?在使用它之前使用global $wpdb
  • 我尝试添加全局 $wpdb;在函数启动之后,但无论我输入什么密码,我都会被重定向到最后一篇文章。
  • $post_id = $wpdb-&gt;get_var( $wpdb-&gt;prepare("SELECT ID FROM $wpdb-&gt;posts WHERE post_password = %s", $post_password) ); $q = new WP_Query( 'p=$post_id' );987654325@之前全球化$wpdb

标签: php wordpress


【解决方案1】:

在此之前全球化 $wpdb

global $wpdb

$post_id = $wpdb-&gt;get_var( $wpdb-&gt;prepare("SELECT id FROM $wpdb-&gt;posts WHERE post_password = %s", $post_password) ); $q = new WP_Query( 'p=$post_id' );

此外,最好使用小写的表/列名

然后像这样重定向

&lt;?php if ( $q-&gt;have_posts() ) : while ( $q-&gt;have_posts() ) : $q-&gt;the_post(); ?&gt;

wp_redirect( the_permalink() );

&lt;?php endif;?&gt;

同样使用 http 状态码作为 wp_redirect() 的第二个参数 这可能会有所帮助 HTTP STATUS CODES

【讨论】:

  • +1 @Mrozh 如果您发现 Lucky 的回答有帮助,请点击他的回答旁边的向上箭头给它一个支持。如果它解决了您的问题/回答了您的问题,您应该单击“勾选”以接受它。欢迎来到 SO! ;-)
  • @Sepster,谢谢 :) 我很高兴你能帮助我,但我仍在寻找真正的解决方案。顺便说一句:还不能投票:(
  • @Mrozh 你已经得到了一个真正的解决方案,你在原始帖子中提出的问题。看来您现在有一个 问题,因此您应该提出一个与新问题特别相关的新问题。如果您认为它会有所帮助,您可以参考这个问题,尽管这段历史可能会使您的新问题蒙上阴影。你不能指望一个人来调试你的整个应用程序;-)
  • @Mrozh Re "还不能投票 :(" 公平投票!:-) 但你可以接受(这会给你更多的代表);-)。问一个新问题(好吧)也会让你获得更多代表。
  • 好的,我做到了。而且我知道人们不会调试我的整个应用程序。如果这是主要问题,我会尝试找到不同的解决方案。在这种情况下,我真的认为这是一件小事,而且由于我是前端开发人员而不是真正喜欢 PHP,我认为有人会很快发现问题。感谢您的建议,我将提出新问题。美好的一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2012-05-30
  • 2016-08-30
  • 2015-02-06
  • 2012-05-14
相关资源
最近更新 更多