web-dev-qa-db-ja.com

投稿がすべての関連するpost_metaレコード(data)と共に保存された後にアクションを実行する

新しい投稿がすべてメタデータで保存された後、私はカスタムPHPコードを実行する必要があります。

私の質問はそれをどのように達成するかです。 save_post actionで試しましたが、メタレコードが保存される前に実行されるので、この場合は使用できません。

それでは、関連するすべてのデータをデータベースに保存して投稿した後にカスタム関数を実行するにはどうすればよいですか。

更新: / 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?

}

前もって感謝します!

4
user198003

_ new _ / postタイプが 'post'の場合は、draft_to_publishアクションフックを使用します。

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

あなたのコールバック関数では、$postWP_postオブジェクトとしてのあなたの投稿です。あなたは投稿のメタ呼び出しget_post_meta関数を手に入れるでしょう。

_ new _ または _ updated _ の投稿タイプ 'post'にはpublish_postアクションフックを使用してください。

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

この場合、コールバック関数は2つのパラメータを取ります。

まったく愚かな解決策だが、うまくいく:

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);
4
user2455079