Rumah  >  Soal Jawab  >  teks badan

Halaman Maya WordPress - "Mencuba untuk mendapatkan 'post_type' harta bukan objek"

Saya sedang membina pemalam WordPress yang menggunakan halaman palsu untuk memaparkan data yang diambil daripada API.

Persediaan agak mudah. Saya mempunyai peraturan penulisan semula untuk URL yang ingin digunakan oleh pemalam dan apabila saya menekan query_vars tertentu, saya melancarkan halaman palsu.

public function __construct()
{

    require_once plugin_dir_path(__FILE__).'vendor/autoload.php';

    add_action('init', [$this, 'rewrite_rule'], 1);

    // add query vars
    add_action('query_vars', [$this, 'add_query_vars_filter'], 1);

    // virtual page init
    add_filter('the_posts', [$this, 'virtual_page'], 1);

}
public function virtual_page($posts)
{

    global $wp, $wp_query;

    if (!empty(get_query_var('plugin'))) {
        $plugin = get_query_var('plugin');
    }

    if (!empty($plugin)) {

        $post = new stdClass();
        $post->post_author = 1;
        $post->post_name = 'lorem ipsum';
        $post->guid = get_bloginfo('wpurl').'/';

        $post->post_title = 'title';
        $post->post_content = 'content';

        $post->ID = -999;
        $post->post_type = 'page';
        $post->post_status = 'static';
        $post->comment_status = 'closed';
        $post->ping_status = 'open';
        $post->comment_count = 0;
        $post->post_date = current_time('mysql');
        $post->post_date_gmt = current_time('mysql', 1);
        $posts = NULL;
        $posts[] = $post;

        $wp_query->is_page = true;
        $wp_query->is_single = false;

        $wp_query->is_singular = true;
        $wp_query->is_home = false;
        $wp_query->is_archive = false;
        $wp_query->is_category = false;

        unset($wp_query->query["error"]);
        $wp_query->query_vars["error"] = "";
        $wp_query->is_404 = false;

        remove_filter('the_content', 'wpautop');
        remove_filter('the_excerpt', 'wpautop');

        return $posts;
    }
}

Kod ini melakukan apa yang diharapkan, iaitu memaparkan halaman palsu dengan kandungan yang saya perlukan, tetapi saya mendapat amaran dalam PHP 8.0:

"Attempt to read property "post_type" on null"

Saya percaya perintah pelaksanaan di sini adalah salah kerana saya mendapat $post dan $wp_query kosong dalam xdebug. Tekaan saya ialah fungsi halaman maya dilaksanakan terlalu awal.

Saya cuba nyahpepijat isu ini untuk masa yang lama tetapi malangnya saya kekurangan pengetahuan backend/WordPress.

Jika sesiapa boleh membantu, saya akan lebih berterima kasih.

P粉265724930P粉265724930251 hari yang lalu399

membalas semua(1)saya akan balas

  • P粉002023326

    P粉0020233262024-01-17 10:01:10

    Jika anda cuba menggunakan halaman maya dalam WP 6.1, anda tidak akan mempunyai ID pos lagi. Garisan ini menyebabkan ia putus.

    $post->ID = -999;

    balas
    0
  • Batalbalas