在POST与所有相关POST_META记录(数据)一起保存后执行操作

时间:2015-06-22 作者:user198003

在新帖子和所有元数据一起保存后,我必须执行自定义PHP代码。

我的问题是如何做到这一点?尝试使用save_post 操作,但它在保存元记录之前执行,所以在这种情况下我不能使用它。

所以,在所有相关数据都保存在数据库中后,如何运行自定义函数?

UPDATED: 我试图用函数中的下一个代码实现。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 个回复
SO网友:Frank P. Walentynowicz

对于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 );
在回调函数中$post 你的职位是WP_post 对象您将收到post的元调用get_post_meta 作用

对于NEWUPDATED post类型“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 );
在这种情况下,回调函数接受两个参数!

SO网友:user2455079

非常愚蠢的解决方案,但有效:

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

SO网友:Jonas Merhej

您可以使用以下选项:

function myFunction($post_id, $post, $update ) {
    // your code here
}

add_action(\'save_post\', \'myFunction\');
$update 是布尔值,如果这是新帖子,则返回false。如果是更新,则返回true。

以下是文档:https://developer.wordpress.org/reference/hooks/save_post/

SO网友:Dave Hilditch

正确而简单的答案是使用wp_insert_post 行动

https://developer.wordpress.org/reference/hooks/wp_insert_post/

wp\\u insert\\u post操作的一个重要区别是,它是在调用update\\u post\\u meta之后发生的。

有3个可用参数-$update标志告诉您这是一篇新文章还是更新过的文章。

add_action(\'wp_insert_post\', \'run_after_post_updated\', 10, 3);    
function run_after_post_updated($post_ID, $post = null, $update = true) {
   //even though the docs say 3 parameters, it seems sometimes only the postid is passed - so you need defaults on the other 2 parameters
   $meta = get_post_meta( $post_ID ); 
   //  ...
}

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在