プラグインの初期化時にWP_Queryを呼び出して投稿データを$ dataに保存する方法を教えてください。
どのフックにメソッドを呼び出してもFatal error: Class 'ms\WP_Query' not found
が出ます。たとえ私がこれをadd_action('shutdown', array($this, 'get_data'));
のように呼んだとしてもそれは機能しません(shutdown
フックはおそらく最後に実行されます)、あるいは私がショートコードadd_shortcode( 'get_data', array($get_data, 'get_data') );
で呼んだ場合
<?php
/*
Plugin Name: Test
Description: Test
Version: 0.1
*/
namespace ms;
if (!defined('ABSPATH')) exit;
class get_data {
private $data = array();
public function __construct(){
// add_action('init', array($this, 'get_data'));
}
public function get_data() {
$args = array(
'post_type' => 'post',
'posts_per_page' => 10
);
$query = new WP_Query($args);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
$this->data[] = array(
'title' => get_the_title()
);
endwhile;
wp_reset_postdata();
endif;
var_dump($this->data);
}
$get_data = new get_data();
add_shortcode( 'get_data', array($get_data, 'get_data') );
このクラスで名前空間を使用しているので、WP_Query呼び出しの前に\
を追加してPHPに、それがこのクラスの名前空間ではなくグローバル名前空間であることを伝える必要があります。
これを試してください:$query = new \WP_Query($args);