データベースを作成してデータを挿入する必要があるプラグインを作成していますが、テーブルを作成する部分がありますが、データを挿入するときにはいつでもエラーが発生します。 insert() could not be called on a null object
と言っています。ここで
<?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
必見関数内で使用されるので、1つにまとめました。これはなぜですか?
名前だけでこの最小限例えば、私が実際のプロジェクトでより多くのユニークな名前を持っています。それは私にこのエラー '不明な関数add_action()を呼び出します。このファイルは、フォームが送信されるたびに実行する必要があります。その場合、グローバルはロードされませんか? –
'add_action'が未定義の場合、WordPressはロードされておらず、別の場所で問題になっています。そしてyes - フックを使用すると、ページが読み込まれるたびに全世界的に聞こえることになりますが、if文はフォームが送信されたときにRUNに伝えることになります。グローバルに聞かない唯一の方法は、それをajax呼び出しに切り替えて、フォームをajax経由で投稿することです。 –
'require( 'path/to/wp-load.php')を追加して、' handle() 'を実行し直すだけに戻って動作させました。 'add_action'で試してみたら、関数は決して実行されませんでした。 –