wp_set_object_terms () schlägt fehl, Bedingungen festzulegen

Okay Jungs, hier ist das Szenario.

Ich versuche eine function einzurichten, die einen Post automatisch (wenn er veröffentlicht wird) auf einen anderen Post-Typ kopiert. Daher wird ein regelmäßiger Blogpost veröffentlicht, und wenn er veröffentlicht wird, werden alle Informationen in einen benutzerdefinierten Posttyp (für WP ECommerce) kopiert, wodurch automatisch ein Geschäftseintrag für diesen Blogpost erstellt wird.

Ich habe eine function geschrieben, die dafür sorgt, dass alle Informationen gesammelt und mit wp_insert_post () in einen neuen Post eingefügt werden. Es funktioniert alles gut, bis auf eine Sache. Ich verwende wp_set_object_terms (), um die Store-Kategorie-IDs des neuen Produkts basierend auf den Tags des Blogposts festzulegen. Aus irgendeinem Grund funktioniert wp_set_object_terms () jedoch nie.

Nun, hier ist der Haken. Ich führe all dies auf einer Multi-Site-Installation durch und verwende threeWP_Broadcast , um es mir zu ermöglichen, Posts zu veröffentlichen. Die Blogposts (die in den Store kopiert werden müssen) werden von einer Subsite veröffentlicht und an die Hauptwebsite gesendet. Der Laden befindet sich auf der Hauptseite.

Also habe ich meine benutzerdefinierte function an das Broadcast-Plugin angehängt, so dass es gefeuert wird, wenn ein Beitrag von einer Sub-Site zur Haupt-Site gesendet wird.

Alles mit meiner function funktioniert super, außer dem wp_set_object_terms ()

Hier ist die function:

function copy_post_to_store_product() { global $blog_id; global $wpdb; // only copy the post over if on main site, not subsites if ($blog_id == 1) { $args = array('numberposts' => 1); $latest = get_posts($args); foreach($latest as $post) : setup_postdata($post); // if NOT Tip and NOT source avail, create product // if source, price is ALWAYS $4 // auto create for source files only -- regular post type $custom_meta = get_post_custom($post->ID); // what kind of post is this? $post_type = $custom_meta['cgc_post_type'][0]; // does this post have a source file product associated with it? $source_avail = $custom_meta['cgc_source_avail'][0]; // source file price $price = '4'; $product_info = array( 'post_title' => $post->post_title, 'post_type' => 'wpsc-product', 'post_content' => $post->post_content, 'post_author' => $post->post_author, 'post_status' => 'draft', ); if($post_type == 'Regular' && $source_avail == true) { // only auto create product for Regular posts that have source files for sale $product_id = wp_insert_post($product_info); update_post_meta($product_id, '_wpsc_price', $price); if (has_tag('blender', $post->ID)) { $product_cats = array(23,32); } elseif (has_tag('max', $post->ID)) { $product_cats = array(23,34); } elseif (has_tag('modo', $post->ID)) { $product_cats = array(23,19); } // set the product categories wp_set_object_terms($product_id, $product_cats, 'wpsc_product_category' ); } endforeach; } 

}

Die function arbeitet, indem sie den neuesten Post von der Hauptseite ($ blog_id == 1) abruft und alle ihre Informationen in Variablen für wp_insert_post () kopiert.

Nun, das wirklich Interessante ist, dass es perfekt funktioniert, wenn ich die function an einen Publish_Post-Hook anschließe, aber leider kann ich das nicht, weil dieser Hook nicht ausgetriggers wird, wenn ein Post gesendet wird.

Irgendwelche Ideen würden sehr geschätzt werden.

Solutions Collecting From Web of "wp_set_object_terms () schlägt fehl, Bedingungen festzulegen"

Ich habe keine Lösung, aber hier ist die Wurzel Ihres Problems: http://core.trac.wordpress.org/ticket/20541

Anscheinend würde ein Aufruf von switch_to_blog () $ wp_taxomies nicht auffüllen, auf die diese Taxonomien angewiesen sind.

Ich bin gerade auf dasselbe Problem gestoßen und habe mit Hilfe von Patrieks Antwort eine Lösung gefunden. Sie müssen nur sicherstellen, dass wp_set_object_terms () ausgeführt wird, nachdem die benutzerdefinierte Taxonomie registriert wurde. Da register_taxonomy () normalerweise bei init ausgeführt wird, können Sie Ihre function auch mit init ausführen, jedoch mit einer niedrigeren Priorität, damit sie später ausgeführt wird.

 add_action( 'init', 'register_custom_taxonomies', 0 ); function register_custom_taxonomies() { // register your taxonomies here } add_action( 'init', 'copy_post_to_store_product', 10) function copy_post_to_store_product() { // your function that runs wp_set_object_terms() here } 

Auf diese Weise ist die Taxonomie garantiert verfügbar, wenn Ihre function ausgeführt wird. Es hat das Problem für mich getriggers.

Vergessen Sie die vorhergehende Antwort, Sie sagen, dass es mit publish_post hook publish_post , dann erstellen Sie ein Plugin in Ihren mu-plugins (“Must-Use” -Plugins), an die Sie Ihre function anschließen können und fügen Sie switch_to_blog bevor Sie mit dem Einfügen und Aktualisieren beginnen Dinge in der database und dann wieder zurück mit restore_current_blog() So

 switch_to_blog($main_blog_id); //usually 1 ... //your function ... restore_current_blog(); 

Ich werfe das hier hin: Ich hatte ein ähnliches Problem, als zum Zeitpunkt, als meine function lief, keine Taxonomie verfügbar war. Dies könnte entweder ein Problem mit Wp E-Commerce oder dem Broadcast-Plugin sein.

Überprüfen Sie, ob das Wp-E-Commerce-Plug-in diese Syntax zum Registrieren ihrer Taxonomie verwendet

 add_action( 'init', 'taxonomy_function_name', 0 ); 

Überprüfen Sie, ob sie die, 0 angehängt haben. Dies setzt die Priorität der Taxonomie-function auf 0. Das wäre so früh wie möglich.

Ist es möglich, die Priorität für den Broadcast-Hook festzulegen?