Post-IDs fehlen beim Aktionshake delete_postmeta

Ich verwende Metadaten in Seiten zum Speichern von Variablen und zum serverseitigen Caching für dynamisch generierte PayPal-Schaltflächen und andere Variablen zu den Seiten (seitenspezifisch).

Ich versuche, die Aktualisierung der Seitenmetadaten anzuhängen, functionen hinzuzufügen und zu löschen. Das Update und Add funktioniert gut (beide mit der gleichen function), aber ich kann nicht herausfinden, löschen.

Um delete_post_data zu verwenden, brauche ich post_id aber die do_action gibt das (zumindest was ich herausfinden kann) nicht aus dem WordPress Quellcode zurück.

 do_action( 'delete_postmeta', $postmetaids ); //sometimes $post_meta_ids 

woher

 $postmetaids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = %s", $post_meta_key ) ); 

oder

 $post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $postid )); 

Der Code, den ich verwende, um die Hooks aufzurufen:

 add_action ('update_postmeta', 'wp_paypal_meta_change',1,4); add_action ('add_postmeta', 'wp_paypal_meta_change', 1, 4); add_action ('delete_postmeta','wp_paypal_meta_delete', 1, 2); 

Die Löschfunktion:

 function wp_paypal_meta_delete($post_id, $meta_keys){ /* handles cases where the user intentionally deletes the metadata, and deletes the appropriate hidden metadata variable in order to make sure the cached PayPal form matches the product data. */ if ($meta_keys == 'image'){ delete_post_meta($post_id,'_thumb'); } else if ($meta_keys == 'shipping' || $meta_keys == 'cost' || $meta_keys== 'bookname'){ delete_post_meta($post_id,'_paypal'); } } 

Ich weiß, dass $post_id nicht in die function kommt, aber es ist da, weil ich gehofft hatte, dass WordPress es irgendwie referenziert – hat nicht funktioniert.

Solutions Collecting From Web of "Post-IDs fehlen beim Aktionshake delete_postmeta"

Von den OPs wurde die Bearbeitung zu einer Antwort verschoben.

Ich habe eine Antwort gefunden, auch keinen geraden Weg. Ich bin mir sicher, dass es einen besseren Weg gibt, dies zu tun. Im Grunde benutze ich eine kleine meta_id , die SQL mit der meta_id post_id meta_id und die post_id meta_id post_id :

 < ?php function get_key_by_id( $meta_ids ) { global $wpdb; $meta_ids = absint( $meta_ids ); // Debugging: // $wpdb->show_errors(); $meta_keys = $wpdb->get_var( $wpdb->prepare( " SELECT meta_key FROM {$wpdb->postmeta} WHERE meta_id = %d " ,$meta_ids ) ); // Debugging: // $wpdb->print_error(); if ( $meta_keys ) return $meta_keys; // else: return false; }