web-dev-qa-db-ja.com

カスタム投稿タイプが更新されるたびにupdate_post_meta()

以下の機能が必要です。カスタム投稿タイプが更新または保存されるたびに、特定のカスタム投稿メタを上書きする必要があります。

これが投稿タイプ 'VA_LISTING_PTYPE'の投稿と 'meta_key' => 'featured-cat'に 'meta_value' => 1を持つ投稿のみに影響することを確認する必要があります

私が現在使用しているコードは次のとおりです(動作していません)。

//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');

私はこれから来ているpre_post_updateのような異なるアクションフックも試してみました answer

うまくいかないようです。私にとって今うまくいっている唯一の本当に醜い修正はこれです:

//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

あなたは 'save_post'アクションフックを使うのが正しいです。

これを試して:

<?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', '');
}

wordpress 3.7以上を使用している場合は、この方法で使用できます。

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', '');
}

私はそれがあなたと共に働くことを願っています。

1
Ammar Alakkad