Heim  >  Fragen und Antworten  >  Hauptteil

Virtuelle WordPress-Seite – „Es wird versucht, die Eigenschaft ‚post_type‘ eines Nicht-Objekts abzurufen“

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.

P粉265724930P粉265724930251 Tage vor403

Antworte allen(1)Ich werde antworten

  • P粉002023326

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

    如果您尝试在 WP 6.1 中使用虚拟页面,您将无法再拥有帖子 ID。这条线导致它破裂。

    $post->ID = -999;

    Antwort
    0
  • StornierenAntwort