Executar ação após a postagem ser salva com todos os registros post_meta relacionados (dados)

3

Eu tenho que executar código PHP personalizado depois que uma nova postagem for salva com todos os seus metadados.

Minha pergunta é como conseguir isso? Tentei com a ação save_post , mas ela é executada antes que os metadados sejam salvos, então não posso usá-lo neste caso.

Então, como posso executar minha função personalizada depois que a postagem com todos os dados relacionados é salva no banco de dados?

ATUALIZADO: tentei atingir o próximo código no arquivo functions.php:

add_action( 'save_post', 'wpse41912_save_post' );

function wpse41912_save_post() {
// get info about latest added post
    $args = array( 'numberposts' => '1', 'post_type' => 'post' );
    $recent_posts = wp_get_recent_posts( $args );
    $myFunc_latest_id = $recent_posts[0]['ID']; // id of the latest post
    $myFunc_post_details = get_post($myFunc_latest_id);
    print_r($myFunc_post_details);

    // how to execute php code when all post meta is added?

}

Obrigado antecipadamente!

    
por user198003 22.06.2015 / 14:26

2 respostas

5

Para o tipo de postagem NEW , 'post' use draft_to_publish action hook:

function fpw_post_info( $post ) {
    if ( 'post' == $post->post_type ) {
        // echo '<pre>'; print_r( $post ); echo '<br />';
        // $meta = get_post_meta( $post->ID ); print_r( $meta ); echo '</pre>'; die();
        // your custom code goes here...
    }
}
add_action( 'draft_to_publish', 'fpw_post_info', 10, 1 );

Na sua função de retorno de chamada, $post é sua postagem como WP_post object. Você receberá a função de meta-chamada get_post_meta do post.

Para o tipo de postagem NOVO ou ATUALIZADO , 'postar' use publish_post action hook:

function fpw_post_info( $id, $post ) {
    // echo '<pre>'; print_r( $post ); echo '<br />';
    // $meta = get_post_meta( $post->ID ); print_r( $meta ); echo '</pre>'; die();
    // your custom code goes here...
}
add_action( 'publish_post', 'fpw_post_info', 10, 2 );

Neste caso, a função de retorno de chamada leva dois parâmetros!

    
por Frank P. Walentynowicz 23.06.2015 / 00:12
3

Solução bastante estúpida, mas funciona:

function afterPostUpdated($meta_id, $post_id, $meta_key='', $meta_value=''){
    if($meta_key=='_edit_lock') {
        if($_GET['message']==1) {
            //
            Your code here
            // 
        }
    }
}
add_action('updated_post_meta', 'afterPostUpdated', 10, 4);
    
por user2455079 21.01.2016 / 19:56