데이터베이스를 만들고 데이터를 삽입해야하는 플러그인을 작성 중입니다. 작성한 테이블을 만들었지 만 시도 할 때마다 데이터가 삽입 될 때까지 오류가 발생합니다 ($wpdb
). 그 말은 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
해야 함수 내에서 사용되므로 하나에 래핑했습니다. 왜 이것에 대한 아이디어가 있습니까?
이름은 바로이 최소한의 예입니다, 나는 실제 프로젝트에 더 많은 고유 한 이름을 가지고있다. 이 오류는'정의되지 않은 함수 add_action() 호출 '오류입니다. 이 파일은 양식이 제출 될 때마다 실행되어야하므로 글로벌이로드되지 않습니까? –
'add_action'이 정의되어 있지 않으면 WordPress가로드되지 않고 다른 곳에서 문제가됩니다. 그리고 예 - 후크를 사용하면 모든 페이지로드시 전역 적으로 인식되지만 if 문은 양식이 제출 될 때 실행되도록 지시합니다. 세계적으로 듣지 않는 유일한 방법은 ajax 호출로 전환하고 양식을 ajax를 통해 게시하는 것입니다. –
그래서'require ('path/to/wp-load.php')를 추가하고 그냥'handle()'을 실행 시켜서 다시 작동시켜야한다. 'add_action'으로 시도해 본 결과 함수는 결코 실행되지 않았습니다. –