我正在使用wp dropzone插件尝试稍微调整一下以创建一个前端图像上传器,将当前帖子设置为附件父级。
该插件工作得非常好,但默认情况下,无论我在何处找到上传器,任何附件都会在我的媒体库中标记为未附加。
我不能为我的生活解决为什么这不起作用,因为我已经尝试了所有标准调用来获取当前的帖子ID并将其设置为父级。
完整的php插件文件相当广泛,所以我已经包含了操作附件插入的核心部分。看看我的进展如下。
重要的是,如果我将post parent设置为实际的id号; '240'例如它附加到被叫帖子。我想把这个附在当前的帖子上。
/**
* Handle ajax file upload to media library.
*
* @since 1.0.0
*/
function wpday_dz_ajax_upload_handle() {
if (!empty($_FILES) && wp_verify_nonce($_REQUEST['wpday_dz_nonce'], 'wpday_dz_protect')) {
// Including file library if not exist
if (!function_exists('wp_handle_upload')) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
// Uploading file to server
$movefile = wp_handle_upload($_FILES['file'], ['test_form' => false]);
// If uploading success & No error
if ($movefile && !isset($movefile['error'])) {
$filename = $movefile['file'];
$filetype = wp_check_filetype(basename($filename), null);
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($filename),
'post_mime_type' => $filetype['type'],
'post_parent' => $post->ID,
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit',
);
// Adding file to media
$attachment_id = wp_insert_attachment($attachment, $filename);
// If attachment success
if ($attach_id) {
require_once ABSPATH . 'wp-admin/includes/image.php';
// Updating attachment metadata
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
wp_update_attachment_metadata($attach_id, $attach_data);
}
$message['error'] = 'false';
$message['data'] = wp_get_attachment_url($attach_id);
} else {
$message['error'] = 'true';
$message['data'] = $movefile['error'];
}
wp_send_json($message);
}
}
add_action('wp_ajax_wpday_dz', 'wpday_dz_ajax_upload_handle');
add_action('wp_ajax_nopriv_wpday_dz', 'wpday_dz_ajax_upload_handle');
编辑:
尝试过:
$id = get_the_ID();
// If uploading success & No error
if ($movefile && !isset($movefile['error'])) {
$filename = $movefile['file'];
$filetype = wp_check_filetype(basename($filename), null);
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($filename),
'post_mime_type' => $filetype['type'],
'post_parent' => $id,
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit',
);
仍然返回未附加的
答案 0 :(得分:1)
我下载了WP Dropzone并查看了代码。 AFAICT您正在处理的功能是在删除/上传文件后通过AJAX调用的。在这种情况下,没有" post"在当前请求中 - 您处于与任何帖子无关的AJAX文件中。
所以问题就变成了如何获取调用当前AJAX请求的帖子的ID。我找到了this SO answer which answers that:
$url = wp_get_referer();
$post_id = url_to_postid( $url );