web-dev-qa-db-fra.com

update_post_meta () chaque fois que le type de publication personnalisé est mis à jour

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');
1
Philip

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.

1
Ammar Alakkad