質問: ### 前提・実現したいこと wordpressの自作table`test`から定期的に`wp_posts`tableにinsertを行いたいです。 phpMyadminのSQLの項目から直接SQL文を実行する場合は ``` INSERT IGNORE INTO wp_posts(post_date, post_title, code, product, count) SELECT intime, title, code, product, count FROM test ``` のSQL文で実行できるのですが、これをcronで行いたく、 PHPで`$wpdb`を使用して実行しようと考えているのですが、エラーに悩まされてしまい どなたかご存知の方がいらっしゃいましたらご教授いただければと思いますm(__)m ### 発生している問題・エラーメッセージ ``` PHP Fatal error: Uncaught Error: Call to a member function query() on null in `ディレクトリパス`:5 Stack trace: #0 {main} thrown in `ディレクトリパス` on line 5 ``` ### 該当のソースコード ``` #!/usr/local/php/7.1/bin/php query("INSERT IGNORE INTO {$wpdb->posts}(post_date, post_title, code, product, count) SELECT intime, title, code, product, count FROM {$wpdb->test}"); $wpdb->print_error(); ?> ``` ### CreateTable CREATE TABLE `wp_posts` ( `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `post_title` text COLLATE utf8mb4_unicode_520_ci NOT NULL, `post_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'publish', `post_name` varchar(200) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '', `post_type` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'post', `product` varchar(255) DEFAULT NULL, `code` varchar(255) NOT NULL, `count` int(11) DEFAULT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `code` (`code`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; --- CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `product` varchar(255) DEFAULT NULL, `code` varchar(255) NOT NULL, `count` int(11) DEFAULT NULL, `intime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) UNIQUE KEY `code` (`code`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
回答: $wpdbはWordPressが起動している状態でしかGlobalにありませんので、直接そのPHPファイルを実行しても定義されていません。 WP-Cronを使ってWordPress内で解決するか、直接DBにアクセスするPHPを書いてしまう($wpdbなどWordPress由来のものを使わない)かどちらかだと思います。 【WordPressで定期的に処理をさせる!WP-Cronの設定方法 – 東京のホームページ制作 / WEB制作会社 BRISK】