【问题标题】:Wordpress - Fatal Error: "Call to a member function get_var() on a non-object" but only if not as TemplateWordpress - 致命错误:“在非对象上调用成员函数 get_var()”但仅当不是作为模板时
【发布时间】:2014-07-26 13:17:12
【问题描述】:

我收到“致命错误:“在非对象上调用成员函数 get_var()”

在 search.php 中使用此代码:

global $owndb;
$testtable = $owndb -> prefix. "stuff";
$values = $owndb->get_var( "SELECT COUNT(*) FROM $testtable" );

$owndb 是在我的活动插件中使用new wpdb 创建的。 search.php 位于“page-templates”下的主题文件夹中,但未定义为模板。该文件仅由 JavaScript 文件调用以发送数据。如果我将其声明为模板(在开头添加“模板名称”),错误就消失了。我试图将 search.php 存储在不同的位置(例如插件目录),但这没有帮助。

为什么我必须将其声明为模板,我该如何规避这一点?

我看到了几个关于该错误的问题,但没有找到适合的解决方案。谢谢!

【问题讨论】:

  • 什么是$owndb。不应该是$wpdb吗?
  • $owndb 不是一个对象,它没有与$wpdb 相同的成员,你必须向我们展示你是如何创建它的?
  • $owndb 是一个外部数据库,而不是 Wordpress 使用的那个。在我的插件中使用 $owndb = new wpdb(); 建立了到这个数据库的连接。当我将 search.php 声明为模板时,这有效,因为我从数据库中获取数据

标签: javascript php mysql json wordpress


【解决方案1】:

我找到了解决方案。当 search.php 未声明为模板(或插件)时,它在 Wordpress 之外工作。要使用 $owndb 和 Wordpress 全局变量,我必须在 search.php 的开头加载 wp-load.php:

require($_SERVER['DOCUMENT_ROOT'].'wp-load.php');

【讨论】:

  • 你漏掉了一个“/”,应该是:require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2012-05-30
  • 2016-08-30
  • 2015-02-06
相关资源
最近更新 更多