web-dev-qa-db-fra.com

Type de message personnalisé | Erreur fatale sur register_post_type ()

J'essaie de développer mon premier plugin Wordpress en utilisant OOP en suivant un guide. Jusqu'ici, j'ai suivi Word pour Word et pourtant, je ne parviens pas à réécrire ce que j'imagine être l'URL.

C'est le code que j'utilise ...

class BookItNow
{
function __construct()
{
    add_action('init', $this->custom_post_type());
}

function activate()
{
    $this->custom_post_type();
    flush_rewrite_rules();
}

function register()
{
    add_action('admin_enqueue_scripts', array($this, 'enqueue'));
}

function deactivate()
{
    flush_rewrite_rules();
}

function custom_post_type()
{
    register_post_type('bookings', ['public' => true, 'label' => 'Bookings']);
}

function enqueue()
{
    wp_enqueue_style('style', plugins_url('/assets/style.css', __FILE__));
}
}

if (class_exists('BookItNow')) {
    $book = new BookItNow();
    $book->register();
}

register_activation_hook(__FILE__, array($book, 'activate'));
register_deactivation_hook(__FILE__, array($book, 'deactivate'));
register_uninstall_hook(__FILE__, array($book, 'uninstall'));

Et voici l'erreur que je reçois Uncaught Error: Call to a member function add_rewrite_tag() on null. Supprimer la $this->custom_post_type() supprime ce problème, donc je n'en ai aucune idée. Toute aide serait appréciée.

1
tallent123

essayez ces modifications:

1) Pour utiliser add_action () lorsque votre plugin ou votre thème est construit à l'aide de classes au lieu de ne transmettre que le nom de la fonction, vous devez passer un tableau avec une référence à la classe ($ this) et à la fonction appelable ('custom_post_type').

function __construct()
{
    add_action('init', array( $this, 'custom_post_type' ) );
}

2) La méthode originale 'activate' appelée 'custom_post_type' suggérant qu'elle n'a besoin d'être appelée qu'une seule fois lorsque le plugin est activé. Mais pour enregistrer correctement le type de publication personnalisé, cette méthode doit être appelée chaque fois que Wordpress est chargé, c'est pourquoi elle est ajoutée au hook 'init'. L'appeler dans la méthode d'activation n'a pas vraiment de sens, je l'ai donc supprimé.

function activate()
{
    flush_rewrite_rules();
}
4
locomo