WP函数在WebHook API调用时不触发

时间:2021-08-02 作者:Manish Bajpai

我创建了一个函数,可以根据自定义元字段值触发并连接父帖子和子帖子。如果现有父帖子的元字段值与新创建的子帖子匹配,则函数会自动将父帖子与子帖子连接。如果我使用WP Admin area或使用前端帖子提交表单创建子帖子,此功能将非常有效。但如果我正在创建子Post usign一个Webhook传入数据,那么函数不会触发。并且它不会基于自定义元字段“连接父帖子”;wpcf-patient-id"E;。

我使用WP Webhooks Pro从外部来源接收数据,其中包括帖子标题、内容、wpcf患者id和其他一些详细信息。每次Webhook接收到有效负载数据时,它都会使用接收到的有效负载数据创建一个新的post。但该函数根本不会触发。

因此,如果有人能帮助我实现这一目标,请提出可能的解决方案。

add_action( \'save_post\', \'assign_parent_patient_func\', 100,3 );
function assign_parent_patient_func( $post_id, $post, $update ) {
    
    // Only set for post_type = post!
    if ( !in_array($post->post_type, array(\'qev-attachment\', \'note\')) ) {
        return;
    }
      
    $patient_id = get_post_meta($post_id, \'wpcf-patient-id\', true); 
    if($patient_id){
        $client_ids = get_posts( array(
            \'post_type\' => \'client\',
            \'meta_key\' => \'wpcf-patient-id\', 
            \'meta_value\'=> $patient_id,
            \'fields\' => \'ids\'
        ));
        if(isset($client_ids[0])){
            $client_id = $client_ids[0];
            if($post->post_type == \'qev-attachment\'){
                toolset_connect_posts(\'client-attachment\', $client_id, $post_id);
            }
            if($post->post_type == \'note\'){
                toolset_connect_posts(\'client-note\', $client_id, $post_id);
            }
        }
    }
}

1 个回复
SO网友:Jannis

从我所看到的是代码中的问题。您的问题是,您试图从当前post的嵌套if语句中获取post类型,即使在第一个if语句中,您根据它进行验证并中断函数。

相反,您要做的是根据$client\\u id变量验证post类型。

$client_parent = get_post( $client_id );
$post_type = \'\';
if( ! empty( $client_parent ) && isset( $client_parent->post_type ) ){
    $post_type = $client_parent->post_type;
    if( $post_type === \'note\' ){
        //run your logic
    }
}
如果它仍然不起作用,您可能需要查看update_post webhook操作。