Hallo :)
Ich habe ein FrontEnd-Benutzerformular, das bei Absenden einen Beitrag mit Post-Type "job" erstellt, bearbeitet oder löscht.
Das funktioniert wunderbar über die Aktion "update_profile".
Das Problem:
Allerdings möchte ich dem Beitrag auch Kategorien (Typ "job_category") zuweisen, die der Benutzer in seinem Formular ausgewählt hat.
Dazu versuche ich die Funktion wp_set_object_terms zu verwenden, was jedoch nicht funktioniert, da die custom Taxonomies noch nicht geladen sind.
Was ich bisher versucht habe:
Als Lösung für dieses Problem bin ich auf diesen Artikel hier gestoßen. Er besagt, dass es funktioniert, wenn man die Funktion im "init"-Hook aufruft.
Ich versuche nun in der von "update_profile" aufgerufenen Funktion den "init"-Hook anzusprechen. Dies geht nicht, vermutlich weil "init" zu dem Zeitpunkt schon gelaufen ist...
aber dann müsste wp_set_object_terms doch funktionieren?
Was kann ich tun, um die custom Taxonomy des Beitrags zu setzen? Könnt ihr mir da bitte helfen?
Mein Code sieht (sehr vereinfacht) so aus:
Es gibt einen JobOfferController, der bei profile_update einen neuen Beitrag (neue Instanz der Klasse "JobOffer") erstellt. In der Klasse "JobOffer" soll auch die custom Taxonomy gesetzt werden.
Anmerkung: Auch wenn manche Variablen in meinem Code nicht initialisiert zu sein scheinen, so sind sie es in Wirklichkeit. Ich habe den Prozess nur der Einfachheit halber weggelassen.
class JobOfferController{
function __construct(){
add_action('profile_update', array($this, 'do_jobOffer_update'), 10, 99);
}
private static function do_jobOffer_update($user_id, $user_obj){
// Ganz viel Zeug wird hier abgearbeitet.
// Irgendwann wird $create_new_post initialisiert.
if($create_new_post){
// Neuer Beitrag wird erstellt
$jobOffer = new JobOffer();
$jobOffer->create();
}else{
// Bestehender Beitrag wird bearbeitet
$jobOffer = new JobOffer($posts[0]->ID);
$jobOffer->update();
}
}
}
/*
This represents a single JobOffer Post.
Responsible for creating, updating and removing itself.
*/
class JobOffer{
private $post_id;
private $post_obj;
private $post_categories;
function __construct($post_id = null){
$this->post_id = $post_id;
$this->post_obj = get_post($post_id);
}
public function create($wp_post = null){
if($wp_post == null) $this->post_id = wp_insert_post($this->post_obj);
else $this->post_id = wp_insert_post($wp_post);
if(is_array($this->post_categories) && $this->post_id != 0){
add_action('init', array($this, 'set_taxonomies'), 99); // Init-Action (funktioniert nicht, obwohl code durchlaufen wird)
}
}
public function update($wp_post = null){
if($wp_post == null) $this->post_id = wp_update_post($this->post_obj);
else $this->post_id = wp_update_post($wp_post);
if(is_array($this->post_categories) && $this->post_id != 0){
add_action('init', array($this, 'set_taxonomies'), 99); // Init-Action (funktioniert nicht, obwohl code durchlaufen wird)
}
}
/*
Taxonomien hier setzen!
*/
private static function set_taxonomies(){
$tax = wp_set_object_terms($this->post_id, $this->post_categories, 'job_category', false);
}
}
Alles anzeigen