J'ai besoin de la fonctionnalité suivante. Chaque fois que mon type de message personnalisé est mis à jour ou enregistré, je dois écraser certaines métas de message personnalisé.
Je dois m'assurer que cela n'affecte que les posts de type 'VA_LISTING_PTYPE' et les posts ayant le pour 'meta_key' => 'vedette-cat' le 'meta_value' => 1
Le code que j'utilise actuellement est le suivant (ne fonctionne pas)
//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');
J'ai aussi essayé différents crochets d'action comme pre_post_update provenant de cette answer
Je n'arrive tout simplement pas à le faire fonctionner. Le seul correctif vraiment moche qui fonctionne pour moi en ce moment est celui-ci:
//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');
Vous avez raison d'utiliser le crochet d'action 'save_post'.
Essaye ça:
<?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', '');
}
si vous êtes sur Wordpress 3.7 ou supérieur, vous pouvez l'utiliser de cette façon:
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', '');
}
J'espère que cela fonctionne avec vous.