2016-04-05 15 views
0

Ich habe ein Plugin erstellt, das benutzerdefinierte Post-Typen und Widgets mit diesen benutzerdefinierten Post-Typen erstellt. Der benutzerdefinierte Post-Typ wird mit dem Action-Tag init und dem Widget mit der Nummer widget_init registriert.Benutzerdefinierte Beitragstypen, die noch nicht in Widgets_init registriert sind?

Wie so:

public function __construct() { 
    // load the modules 
    add_action('init', array($this, 'addModule')); 

} 

public function addModule() { 
    // register the post type. 
    register_post_type($this->post_type, $this->getArgs()); 
} 

Und das Widget wird wie folgt aufgerufen:

add_action('widgets_init', function() { 
    register_widget('Webburo\Widgets\project\ProjectsWidget'); 
}); 

Wenn ich die Post-Typen mit get_post_types() im Widget-Code var_dump(), wird es nicht die neu zeigen registriert Beitragstypen. So scheint es mir, dass die Beitragstypen noch nicht in der widget_init registriert sind. Gibt es etwas, das ich falsch mache oder mir etwas fehlt?

Antwort

0

Anscheinend ist der widget_init auf Priorität 1 der init Aktion ausgelöst wird. Das erklärt, warum meine Post-Typen noch nicht registriert waren. Ich habe meine Aktion auf Priorität 0 gesetzt, damit meine Post-Typen registriert werden, bevor meine Widgets funktionieren.

add_action('init', array($this, 'addModule'), 0, 1); 

Quelle: https://codex.wordpress.org/Plugin_API/Action_Reference

0

Stellen Sie sicher, dass Sie den öffentlichen Schlüssel in den Argumenten, die in der register_post_type()-Funktion übergeben werden, festgelegt haben.

dann den folgenden Code verwenden, um alle öffentlichen Einschreiben Art zu erhalten:

$args = array(
    'public' => true, 
); 

$output = 'names'; // names or objects, note names is the default 
$operator = 'and'; // 'and' or 'or' 

$post_types = get_post_types($args, $output, $operator); 

foreach ($post_types as $post_type) {  
    echo '<p>' . $post_type . '</p>'; 
} 
+0

Ich habe der öffentliche Schlüssel true gesetzt, aber immer noch i registriert haben nicht die benutzerdefinierten Post-Typen erhalten. Wenn ich zum Beispiel die Funktion in einer 'admin_init'-Aktion verwende, kann ich die benutzerdefinierten Post-Typen sehen. Es ist so, als wäre es noch nicht im Moment des Widget-Codes registriert. –

+0

Das könnte der Grund sein, da der admin_init vor jedem anderen Hook ausgelöst wird, wenn ein Benutzer auf den Admin-Bereich zugreift. und Init Hook wird geladen und gefolgt von anderen, das ist Widget Hook und etc –

Verwandte Themen