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.
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 dermeta_id
post_id
meta_id
und diepost_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; }