Php 删除Buddypress封面图像按钮

Php 删除Buddypress封面图像按钮,php,wordpress,buddypress,Php,Wordpress,Buddypress,我试图在用户档案>封面图片页面上有一个简单的按钮,上面写着“删除封面图片”。他们使用的主题会覆盖封面图像的模板,如下所示: 我知道Buddypress有这个选项,一旦用户上传了封面图片,那么在上传后立即可以删除它,但是我如何添加一个按钮,允许他们随时删除封面图片,而不是在上传后直接删除 我知道我不想编辑的核心,但我发现的行动负责这一点。是否有一种方法可以创建一个按钮来调用此操作并删除用户封面照片 在buddypress/bp core/bp core attachments.php中: /**

我试图在用户档案>封面图片页面上有一个简单的按钮,上面写着“删除封面图片”。他们使用的主题会覆盖封面图像的模板,如下所示:

我知道Buddypress有这个选项,一旦用户上传了封面图片,那么在上传后立即可以删除它,但是我如何添加一个按钮,允许他们随时删除封面图片,而不是在上传后直接删除

我知道我不想编辑的核心,但我发现的行动负责这一点。是否有一种方法可以创建一个按钮来调用此操作并删除用户封面照片

在buddypress/bp core/bp core attachments.php中:

/**
 * Ajax delete a cover image for a given object and item id.
 *
 * @since 2.4.0
 *
 * @return string|null A json object containing success data if the cover image was deleted
 *                     error message otherwise.
 */
function bp_attachments_cover_image_ajax_delete() {
    // Bail if not a POST action.
    if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) ) {
        wp_send_json_error();
    }

    $cover_image_data = $_POST;

    if ( empty( $cover_image_data['object'] ) || empty( $cover_image_data['item_id'] ) ) {
        wp_send_json_error();
    }

    // Check the nonce
    check_admin_referer( 'bp_delete_cover_image', 'nonce' );

    // Capability check
    if ( ! bp_attachments_current_user_can( 'edit_cover_image', $cover_image_data ) ) {
        wp_send_json_error();
    }

    // Set object for the user's case
    if ( 'user' === $cover_image_data['object'] ) {
        $component = 'xprofile';
        $dir       = 'members';

    // Set it for any other cases
    } else {
        $component = $cover_image_data['object'] . 's';
        $dir       = $component;
    }

    // Handle delete
    if ( bp_attachments_delete_file( array( 'item_id' => $cover_image_data['item_id'], 'object_dir' => $dir, 'type' => 'cover-image' ) ) ) {

        // Defaults no cover image
        $response = array(
            'reset_url'     => '',
            'feedback_code' => 3 ,
        );

        // Get cover image settings in case there's a default header
        $cover_params = bp_attachments_get_cover_image_settings( $component );

        // Check if there's a default cover
        if ( ! empty( $cover_params['default_cover'] ) ) {
            $response['reset_url'] = $cover_params['default_cover'];
        }

        // Finally send the reset url
        wp_send_json_success( $response );

    } else {
        wp_send_json_error( array(
            'feedback_code' => 2,
        ) );
    }
}
add_action( 'wp_ajax_bp_cover_image_delete', 'bp_attachments_cover_image_ajax_delete' );

最后,我知道封面图片通常存储在members/{id}/cover image/文件夹中,更糟糕的情况是,当他们单击按钮时,它只会获取他们的用户id并删除相应的文件或目录?

我开始了这个过程。它可以工作,可以修改和构建以适应,但这是我的工作:

<?php 
$ID = get_current_user_id();
if(isset($_GET['delete'])){
    $fileFull = 'coverphoto-full.jpg';
    $fileThumb = 'coverphoto-thumb.jpg';
    $upload_dir = wp_upload_dir();
    $user_dirname = $upload_dir['basedir'].'/avatars/'.$ID.'/';
    unlink($user_dirname . $fileFull);
    unlink($user_dirname . $fileThumb);
}  ?>
<a href="?delete=<?php echo $ID; ?>" onclick="return confirm('Are You Sure?')">Delete Cover Image</a>

注意:我有一个模板,所以我的封面图像存储在
上传/avatars/{ID}/coverphoto full.jpg
中。对于普通BP用户,
$user\u dirname
文件路径可能需要更改为
buddypress/members/{ID}/cover image/…
或其变体