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.
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;