首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向第三方回调函数中添加参数

向第三方回调函数中添加参数
EN

WordPress Development用户
提问于 2021-12-16 05:36:43
回答 1查看 48关注 0票数 0

我一直在开发一个WordPress插件,并使用do_shortcode()实现了表单.文件上传中的一些功能。上传处理来自一个第三方插件,它的工作非常出色。

但现在我有麻烦了。我想要分配文件的名称,正在上传到一个记录在数据库中,在我的插件。但是,该db记录的标识符目前在第三方提供的回调钩子中不可用。

这过去是工作的,认为使用cookie,但自从升级到一个较新的PHP版本,进程失败到现在为止。

下面是我用来演示这个问题的代码的<#>subset

代码语言:javascript
复制
add_shortcode('MMD_SHOW_ENTRY_FORM', 'mmd_vimeo_videoupload');
function mmd_vimeo_videoupload($atts)
{
    
$OrderId             = sanitize_text_field(stripslashes($_GET['or']));
$BillingEmail        = sanitize_text_field(stripslashes($_GET['id']));
$FormType            = sanitize_text_field(stripslashes($_GET['type']));
$RideCount           = sanitize_text_field(stripslashes($_GET['cnt']));
$ListId              = sanitize_text_field(stripslashes($_GET['show']));


setcookie("VHSEntryListId", $ListId, time() + ( 3600 * 3));  <<< THROWS ERROR
$_COOKIE['VHSEntryListId'] = $ListId;
   
setcookie("VHSOrderId", $OrderId, time() + (3600 * 3)); <<< THROWS ERROR
$_COOKIE['VHSOrderId'] = $OrderId ;
   
setcookie("VHSRideCount", $RideCount, time() + (3600 * 3)); <<< THROWS ERROR
$_COOKIE['VHSRideCount'] = $RideCount;
  

?>
    


do_shortcode("[google_upload]"); 

我试过的是:

  1. 设置Cookies,但由于它不在标头中,所以它将抛出警告,而不存储cookie值。(见上文)。
  2. 全局变量已经退出,因为我可以让多个用户同时输入数据。
  3. 从设置了on...the回调的页面读取URL参数,不知道这是什么,$_Get()失败了。

因此,我想知道,是否有“添加参数”的第三方回调函数?传递这些变量,以便在上传完成后从其他插件接收。

想法,想法??现在我没有主意了。需要帮助!

EN

回答 1

WordPress Development用户

发布于 2021-12-18 21:04:38

我tried...but最终走向了一个完全不同的方向,因为似乎没有可行的解决方案。我结束了在临时数据库条目中的存储。如果两个人使用相同的帐户,可能会有种族状况。但对于那些有兴趣的人来说,这是我的解决方案:

我正在使用非常有效的插件调用UserYourDrive作为文件上传接口。他们很好地提供了回调,这证明在这个问题上是有帮助的。

我使用的是当前用户,因为他们必须登录才能执行此任务。当前用户是绑定元素。

从短代码开始,输入:

代码语言:javascript
复制
mmd_InsertFileUploadCoreData($current_user->ID, $ListId, $RideCount, $OrderId);   // straight 1st time load

但是,您必须确保这不是一个post响应,因此,如果没有为post设置任何内容,那么您才会调用初始的核心数据,并在后面调用所需的元素。

一旦上传完成,就会收到回电。这是存储上传文件的文件名的地方。

代码语言:javascript
复制
mmd_InsertFileUploadName($current_user->ID, $UploadedFileName);   // Don't save it. We only have the userid to find it.

当用户单击包含其余表单数据的submit按钮时,才会清除临时存储的数据。

代码语言:javascript
复制
 mmd_DeleteFileUploadData($current_user->ID);

它确实有一个潜在的种族条件洞,但这应该是一个罕见的发生。代码集:

代码语言:javascript
复制
add_action('useyourdrive_upload_post_process', 'mmd_store_upload_information', 10, 2); // Start watching the upload
function mmd_store_upload_information($uploaded_entries, $processor)
{ 
 $ListId        = NULL;
 $OrderId       = NULL;
 $RideCount     = NULL;
 $current_user = wp_get_current_user();
 $Record        = mmd_FindFileUploadData($current_user->ID);
 if(!empty($Record))
     {
     $ListId        = $Record['ListId'];
     $OrderId       = $Record['OrderId'];
     $RideCount     = $Record['RideId'];
     $DBId          = $Record['id'];
     unset($Record);                           // Clear the record
     mmd_DebugLog('READ  UserId: ' . $current_user->ID .  ' List Id: ' . $ListId . '  OrderId: ' . $OrderId  . 'Ride Count:' .  $RideCount);
     }
  else
   return;   // Nothing here, so bail out.   
 
 if($ListId == NULL || $ListId == "")
    return;
 
 if($OrderId == NULL || $OrderId == "")
    return;
    
 if($RideCount == NULL || $RideCount == "")
    return; 
  
 $entries = (array)$uploaded_entries;   
 foreach ($entries as $cached_node) 
       {
        $Node = (array)$cached_node; 
        if(empty($Node['name']))
          continue;
                
        $UploadedFileName = $Node['name'];
        $DownloadLink     = $Node['direct_download_link'];  
        mmd_InsertFileUploadName($current_user->ID, $UploadedFileName);   // Don't save it. We only have the userid to find it.
        mmd_StoreUploadedFileName( $ListId, $OrderId, $RideCount, $UploadedFileName, $DownloadLink );
        break;
    }   
}


function mmd_InsertFileUploadName($UserId, $FileName)
{
global $wpdb;   
$Table_Name = $wpdb->prefix.'mmd_temp_fileupload_data'; 
$sql_query = $wpdb->prepare( "UPDATE $Table_Name SET FileName = %s WHERE UserId = %d", $FileName, $UserId);
$wpdb->query( $sql_query );     

}


function mmd_InsertFileUploadName($UserId, $FileName)
{
global $wpdb;   
$Table_Name = $wpdb->prefix.'mmd_temp_fileupload_data'; 
$sql_query = $wpdb->prepare( "UPDATE $Table_Name SET FileName = %s WHERE UserId = %d", $FileName, $UserId);
$wpdb->query( $sql_query ); 


}




function mmd_FindFileUploadData($UserId)
{
global $wpdb;   
$Table_Name = $wpdb->prefix.'mmd_temp_fileupload_data'; 
$sql_query  = $wpdb->prepare("SELECT * FROM $Table_Name WHERE UserId=%d", $UserId);
 $Record    = $wpdb->get_row($sql_query, ARRAY_A);

return $Record;     
}


function mmd_DeleteFileUploadData($UserId)
{
global $wpdb;   
$Table_Name = $wpdb->prefix.'mmd_temp_fileupload_data'; 
$sql_query  = $wpdb->prepare("DELETE FROM $Table_Name WHERE UserId=%d", $UserId);
$wpdb->query( $sql_query );
}
票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/400323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档