将父级作为当前ID无效

时间:2017-12-09 02:30:54

标签: php jquery wordpress

我正在使用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',
        );

仍然返回未附加的

1 个答案:

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