Halaman Maya WordPress - "Mencuba untuk mendapatkan 'post_type' harta bukan objek"
P粉265724930
P粉265724930 2024-01-16 12:01:22
0
1
518

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粉265724930
P粉265724930

membalas semua(1)
P粉002023326

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;

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan