web-dev-qa-db-ja.com

致命的なエラー:プラグインの初期化時にクラス 'ms\WP_Query'が見つけられません

プラグインの初期化時に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') );
2
Ivan Topić

このクラスで名前空間を使用しているので、WP_Query呼び出しの前に\を追加してPHPに、それがこのクラスの名前空間ではなくグローバル名前空間であることを伝える必要があります。

これを試してください:$query = new \WP_Query($args);

12
Welcher