update_post_meta () sempre que o tipo de publicação personalizado é atualizado

Eu preciso da seguinte funcionalidade. Sempre que o meu tipo de postagem personalizado é atualizado ou salvo, preciso sobrescrever determinados metadados personalizados.

Eu preciso ter certeza de que isso afete apenas as postagens do tipo de publicação ‘VA_LISTING_PTYPE’ e as postagens que possuem o ‘meta_key’ => ‘featured-cat’ o ‘meta_value’ => 1

O código que estou usando no momento é o seguinte (não funciona)

//Remove urls from free listings function remove_url_free_post( $post_id ) { $slug = 'VA_LISTING_PTYPE', if ( $slug != $_POST['post_type'] ) { return; } $meta_values = get_post_meta( $post_id, 'featured-cat', true ); if ( $meta_values != 1 ) { return; } update_post_meta($post_id, 'website', ''); update_post_meta($post_id, 'twitter', ''); update_post_meta($post_id, 'facebook', ''); } add_action('save_post', 'remove_url_free_post'); 

Eu também tentei diferentes ganchos de ação como pre_post_update provenientes dessa resposta

Eu simplesmente não consigo fazer isso funcionar. A única solução realmente feia que está funcionando para mim agora é essa:

 //Remove urls from free listings function remove_url_free_post() { //Fetches all the listings that have featured cat which equals free listing for us $r = new WP_Query( array( 'post_type' => VA_LISTING_PTYPE, 'no_found_rows' => true, 'meta_key' => 'featured-cat', 'meta_value' => 1 ) ); if ( $r->have_posts() ) : while ( $r->have_posts() ) : $r->the_post(); //removes the website, twitter and facebook $post_id3 = get_the_ID(); update_post_meta($post_id3, 'website', ''); update_post_meta($post_id3, 'twitter', ''); update_post_meta($post_id3, 'facebook', ''); endwhile; endif; } //Not ideal at all as called everytime, save_post not working as intended add_action('wp_footer', 'remove_url_free_post'); 

Solutions Collecting From Web of "update_post_meta () sempre que o tipo de publicação personalizado é atualizado"

Você tem razão ao usar o gancho de ação ‘save_post’.

Tente isso:

 < ?php add_action('save_post', 'some_function'); function some_function($post_id) { if(get_post_type($post_id) != "VA_LISTING_PTYPE") return; $meta_value = get_post_meta( $post_id, 'featured-cat', true ); if($meta_value != 1) return; update_post_meta($post_id, 'website', ''); update_post_meta($post_id, 'twitter', ''); update_post_meta($post_id, 'facebook', ''); } 

Se você estiver no WordPress 3.7 ou superior, você pode usá-lo desta maneira:

 add_action('save_post_VA_LISTING_PTYPE', 'some_function'); function some_function($post_id) { $meta_value = get_post_meta( $post_id, 'featured-cat', true ); if($meta_value != 1) return; update_post_meta($post_id, 'website', ''); update_post_meta($post_id, 'twitter', ''); update_post_meta($post_id, 'facebook', ''); } 

Espero que funcione com você.