Page virtuelle WordPress - "Essayer d'obtenir la propriété 'post_type' de non-objet"
P粉265724930
P粉265724930 2024-01-16 12:01:22
0
1
482

Je construis un plugin WordPress qui utilise des pages factices pour afficher les données récupérées à partir d'une API.

La configuration est relativement simple. J'ai une règle de réécriture pour les URL sur lesquelles le plugin veut travailler, et lorsque j'appuie sur des query_vars spécifiques, je lance une page factice.

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

Ce code fait ce qu'il est censé faire, c'est-à-dire afficher une page factice avec le contenu dont j'ai besoin, mais je reçois un avertissement en PHP 8.0 :

"Attempt to read property "post_type" on null"

Je pense que l'ordre d'exécution ici est erroné car je reçois $post et $wp_query vides dans xdebug. Je suppose que la fonction de page virtuelle est exécutée trop tôt.

J'ai essayé de déboguer ce problème pendant longtemps mais malheureusement je manquais de connaissances backend/WordPress.

Si quelqu'un peut m'aider, je lui en serais encore plus reconnaissant.

P粉265724930
P粉265724930

répondre à tous(1)
P粉002023326

Si vous essayez d'utiliser des pages virtuelles dans WP 6.1, vous n'aurez plus d'identifiant de publication. Cette ligne provoque sa rupture.

$post->ID = -999;

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal