2016-02-22 4 views
0

Я пытаюсь создать кнопку на странице «Профиль»> «Обложка», в которой говорится просто «Удалить обложку». Тема, которую они используют, изменяет шаблон обложки, как показано здесь: http://pastebin.com/XQPpiVYsУдалить изображение кнопки Coverdypress

Я знаю, что Buddypress имеет этот параметр после того, как пользователь загрузил изображение обложки, тогда возможность его удаления доступна сразу после загрузки, но как можно добавить кнопку, позволяющую удалять обложку в любое время, а не сразу после загрузки?

Я знаю, что я не хочу редактировать ядро, но я нашел действие, ответственное за это. Есть ли способ создать кнопку, которая вызовет это действие и удалит фотографию обложки для пользователей?

в BuddyPress/п.н.-ядро/BP-ядро-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'); 

и, наконец, я знаю, что изображения обложки обычно хранятся в члены/{ID}/крышка-изображение/папке, худший сценарий ситуации, когда они нажимают кнопку, он просто захватывает свой идентификатор пользователя и удаляет соответствующий файл или каталог?

ответ

0

У меня это началось. Он работает и может быть изменен и построен в соответствии, но это то, что работает для меня:

<?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> 

Примечание: У меня есть шаблон над поездкой, чтобы мои изображения обложки сохраняются в uploads/avatars/{ID}/coverphoto-full.jpg. Для среднего пользователя BP может понадобиться изменить путь к файлу $user_dirname на buddypress/members/{ID}/cover-image/... или на его вариант.