Ich baue ein WordPress-Plugin, das Dummy-Seiten verwendet, um von einer API abgerufene Daten anzuzeigen.
Die Einrichtung ist relativ einfach. Ich habe eine Umschreiberegel für die URLs, an denen das Plugin arbeiten möchte, und wenn ich auf bestimmte Abfragevariablen klicke, starte ich eine Dummy-Seite.
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; } }
Dieser Code tut, was von ihm erwartet wird, nämlich eine Dummy-Seite mit dem von mir benötigten Inhalt anzuzeigen, aber ich erhalte in PHP 8.0 eine Warnung:
"Attempt to read property "post_type" on null"
Ich glaube, dass die Ausführungsreihenfolge hier falsch ist, weil ich in xdebug leere $post und $wp_query erhalte. Ich vermute, dass die Funktion der virtuellen Seite zu früh ausgeführt wird.
Ich habe lange versucht, dieses Problem zu beheben, aber leider fehlten mir Backend-/WordPress-Kenntnisse.
Wenn jemand helfen kann, wäre ich noch dankbarer.
如果您尝试在 WP 6.1 中使用虚拟页面,您将无法再拥有帖子 ID。这条线导致它破裂。
$post->ID = -999;