it-swarm.com.de

update_post_meta (), wenn der benutzerdefinierte Beitragstyp aktualisiert wird

Ich benötige folgende Funktionalität. Immer wenn mein benutzerdefinierter Beitragstyp aktualisiert oder gespeichert wird, muss ich bestimmte benutzerdefinierte Beitragsmetas überschreiben.

Ich muss sicherstellen, dass dies nur Posts des Post-Typs 'VA_LISTING_PTYPE' und Posts betrifft, die für den 'meta_key' => 'featured-cat' den 'meta_value' => 1 haben

Der Code, den ich im Moment benutze, ist der folgende (funktioniert nicht)

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

Ich habe auch verschiedene Aktions-Hooks wie pre_post_update ausprobiert, die von diesem answer stammen.

Ich kann es einfach nicht zum Laufen bringen. Die einzige wirklich hässliche Lösung, die derzeit für mich funktioniert, ist die folgende:

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

Sie haben Recht, den Aktions-Hook 'save_post' zu verwenden.

Versuche dies:

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

wenn Sie mit Wordpress 3.7 oder höher arbeiten, können Sie dies folgendermaßen tun:

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

Ich hoffe es klappt bei dir.

1
Ammar Alakkad