wake-up-neo.com

Benutzerdefinierter Beitragstyp | Schwerwiegender Fehler bei register_post_type ()

Ich versuche, mein erstes Wordpress-Plugin mit OOP zu entwickeln, indem ich einer Anleitung folge. Bisher bin ich Word für Word gefolgt, aber ich habe Probleme mit einem Problem, bei dem ich nicht in der Lage bin, die URL neu zu schreiben.

Dies ist der Code, den ich benutze ...

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'));

Und dies ist der Fehler, den ich erhalte: Uncaught Error: Call to a member function add_rewrite_tag() on null. Durch das Entfernen von $this->custom_post_type() wird dieses Problem behoben, sodass ich keine Ahnung habe. Jede Hilfe wäre dankbar.

1
tallent123

probieren Sie diese Änderungen aus:

1) Um add_action () zu verwenden, wenn Ihr Plugin oder Theme mit Klassen erstellt wird, anstatt nur den Funktionsnamen zu übergeben, müssen Sie ein Array mit einem Verweis auf die Klasse ($ this) und die aufrufbare Funktion ('custom_post_type') übergeben.

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

2) Die ursprüngliche 'activate'-Methode mit dem Namen' custom_post_type 'schlägt vor, dass sie nur einmal aufgerufen werden muss, wenn das Plugin aktiviert ist. Um den benutzerdefinierten Beitragstyp jedoch ordnungsgemäß zu registrieren, muss diese Methode jedes Mal aufgerufen werden, wenn Wordpress geladen wird. Deshalb wird sie dem 'init'-Hook hinzugefügt. Es macht keinen Sinn, es in der Methode activate aufzurufen, und so habe ich es entfernt.

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