我一直在开发一个WordPress插件,并使用do_shortcode()实现了表单.文件上传中的一些功能。上传处理来自一个第三方插件,它的工作非常出色。
但现在我有麻烦了。我想要分配文件的名称,正在上传到一个记录在数据库中,在我的插件。但是,该db记录的标识符目前在第三方提供的回调钩子中不可用。
这过去是工作的,认为使用cookie,但自从升级到一个较新的PHP版本,进程失败到现在为止。
下面是我用来演示这个问题的代码的<#>subset
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]"); 我试过的是:
设置Cookies,但由于它不在标头中,所以它将抛出警告,而不存储cookie值。(见上文)。全局变量已经退出,因为我可以让多个用户同时输入数据。从设置了on...the回调的页面读取URL参数,不知道这是什么,$_Get()失败了。因此,我想知道,是否有“添加参数”的第三方回调函数?传递这些变量,以便在上传完成后从其他插件接收。
想法,想法??现在我没有主意了。需要帮助!
发布于 2021-12-18 21:04:38
我tried...but最终走向了一个完全不同的方向,因为似乎没有可行的解决方案。我结束了在临时数据库条目中的存储。如果两个人使用相同的帐户,可能会有种族状况。但对于那些有兴趣的人来说,这是我的解决方案:
我正在使用非常有效的插件调用UserYourDrive作为文件上传接口。他们很好地提供了回调,这证明在这个问题上是有帮助的。
我使用的是当前用户,因为他们必须登录才能执行此任务。当前用户是绑定元素。
从短代码开始,输入:
mmd_InsertFileUploadCoreData($current_user->ID, $ListId, $RideCount, $OrderId); // straight 1st time load但是,您必须确保这不是一个post响应,因此,如果没有为post设置任何内容,那么您才会调用初始的核心数据,并在后面调用所需的元素。
一旦上传完成,就会收到回电。这是存储上传文件的文件名的地方。
mmd_InsertFileUploadName($current_user->ID, $UploadedFileName); // Don't save it. We only have the userid to find it.当用户单击包含其余表单数据的submit按钮时,才会清除临时存储的数据。
mmd_DeleteFileUploadData($current_user->ID);它确实有一个潜在的种族条件洞,但这应该是一个罕见的发生。代码集:
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 );
}https://wordpress.stackexchange.com/questions/400323
复制相似问题