Cómo hacer un solo clic para descargar la imagen en una sola publicación

4

Tengo attacment.php como este.

<?php  

if ( $attachments = get_children( array(  
'post_type' => 'attachment',  
'post_mime_type'=>'image',  
'numberposts' => 1,  
'post_status' => null,  
'post_parent' => $post->ID  
)));
foreach ($attachments as $attachment) {  
echo wp_get_attachment_link( $attachment->ID, '' , false, true, 'Download This Wallpaper');  
}  
?> 

este código imprimirá el enlace adjunto.

Mi pregunta es: ¿Cómo hacer que este enlace sea de un solo clic para descargar la imagen y guardar para el usuario de la computadora?

    
pregunta Angel 15.03.2013 - 00:44

3 respuestas

2

Es posible utilizando el complemento:

enlace

Estoy aquí para ayudarlo, ya que estoy usando la misma funcionalidad en mi sitio web (forzar la descarga de adjuntos de publicaciones)

    
respondido por el whiteletters in blankpapers 15.03.2013 - 07:37
1

Aunque no es específico de WP, aquí se explica cómo forzar al usuario a descargar una imagen:

if ( $attachments = get_posts( array(
    'post_type' => 'attachment',
    'post_mime_type'=>'image',
    'numberposts' => -1,
    'post_status' => 'any',
    'post_parent' => $post->ID,
) ) );
foreach ( $attachments as $attachment ) {
    echo '<a href="javascript:void(0);"
        onclick="document.execCommand(\'SaveAs\', true, \'' . get_permalink( $attachment->ID ) . '\');">
        Download This Wallpaper</a>';
}

Nota : el código no se ha probado.

    
respondido por el tfrommen 15.03.2013 - 01:54
0

Guarde lo siguiente como image.php en su tema:

<?php

// This forces all image attachments to be downloaded instead of displayed on the browser.
// For it to work, this file needs to be called "image.php".
// For more info, refer to the wp hierarchy diagram.

// Get the path on disk. See https://wordpress.stackexchange.com/a/20087/22510
global $wp_query;
$file = get_attached_file($wp_query->post->ID);

// Force the browser to download. Source: https://wpquestions.com/7521
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: public'); //for i.e.
header('Pragma: public');

// ob_clean(); // Looks like we don't need this
flush();
readfile($file);
exit;
    
respondido por el That Brazilian Guy 28.02.2018 - 19:14

Lea otras preguntas en las etiquetas