php – $wpdb尽管是全局的,但仍为null
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – $wpdb尽管是全局的,但仍为null,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2331字,纯文字阅读大概需要4分钟。
内容图文
![php – $wpdb尽管是全局的,但仍为null](/upload/InfoBanner/zyjiaocheng/727/be3b87f11a89486fbaae18b120b4a5d2.jpg)
我正在开发一个插件,需要创建一个数据库并将数据插入其中,我已经完成了创建部分的表,但是每当我尝试使用$wpdb插入数据时都会出现错误,说无法调用insert()在null对象上.
这是一个最小版本:
<?php
/*
Plugin Name: Test
*/
function activation() {
global $wpdb;
$table_name = $wpdb->prefix . 'testing';
$charset_collate = $wpdb->get_charset_collate();
# create table
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
$sql = "CREATE TABLE " . $table_name . " (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name TEXT NOT NULL,
PRIMARY KEY (id)
) " . $charset_collate . ";";
require_once(ABSPATH . "wp-admin/includes/upgrade.php");
dbDelta($sql);
}
}
function html($atts) {
$out = "";
return "<form action='wp-content/plugins/test/submit.php' method='post'><input type='text' name='name'><input type='submit' name='submit'></form>";
}
# setup and cleanup hooks
register_activation_hook(__FILE__, "activation");
add_shortcode('testing', 'html');
这是表单提交文件:
<?php
function handle() {
global $wpdb;
if (isset($_POST['submit'])) {
$wpdb->insert('wp_testing', array('name' => "test"));
}
}
handle();
我读了这个问题:$wpdb is null even after ‘global $wpdb并且很不清楚,但似乎表明$wpdb必须在一个函数中使用,所以我把它包装在一个中.有关为什么会这样的想法?
解决方法:
固定
如果您在不加载WordPress的情况下将表单直接发布到PHP文件,除非您需要wp-load.php,否则它的所有功能都不可用.这就是为什么add_action和$wpdb未定义的原因.
请参阅下面的评论和原始答案,了解在WordPress中发布表单的详细信息和其他方法.
原始答案
你似乎没有把handle()函数绑定到任何钩子所以它正在加载和运行,因为WordPress包含必要的文件,但在它实际加载$wpdb之前.这就是为什么没有定义$wpdb – 它还不存在.试试这个:
<?php
function handle() {
global $wpdb;
if( isset( $_POST[ 'submit' ] ) ){
$wpdb->insert( 'wp_testing', array( 'name' => 'test' ) );
}
}
//handle();
add_action( 'init', 'handle' );
我还考虑为handle()函数添加前缀(或者更好,将其包装在类中)以避免命名冲突.就像是:
<?php
function jacob_morris_handle() {
global $wpdb;
if( isset( $_POST[ 'submit' ] ) ){
$wpdb->insert( 'wp_testing', array( 'name' => 'test' ) );
}
}
//handle();
add_action( 'init', 'jacob_morris_handle' );
要么
<?php
class JacobMorris {
function handle() {
global $wpdb;
if( isset( $_POST[ 'submit' ] ) ){
$wpdb->insert( 'wp_testing', array( 'name' => 'test' ) );
}
}
function __construct(){
add_action( 'init', array( $this, 'handle' ) );
}
}
new JacobMorris();
内容总结
以上是互联网集市为您收集整理的php – $wpdb尽管是全局的,但仍为null全部内容,希望文章能够帮你解决php – $wpdb尽管是全局的,但仍为null所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。