web-dev-qa-db-de.com

Löschen Sie Anhänge aus dem Frontend

Ich versuche, einen einfachen Medienmanager am vorderen Ende meiner Beiträge zu erstellen, da meine Website viele Autoren haben wird. Ich möchte ihnen die Möglichkeit geben, Bildanhänge zu löschen, die sie in ihre Posts hochgeladen haben (ohne Zugriff auf den Medienmanager, da ich möchte, dass dieser mobil kompatibel ist).

Aus meiner Online-Recherche bin ich auf den folgenden Code gekommen, der nicht funktioniert. Die Miniaturansicht wird zusammen mit dem Kontrollkästchen angezeigt, in dem Sie aufgefordert werden, das Bild zu löschen. Wenn ich jedoch auf Senden drücke, wird die Seite neu geladen und es wird keine Änderung angezeigt (der Anhang wurde nicht gelöscht).

Könnt ihr mir bitte helfen, das zum Laufen zu bringen?

 <?php
$user_id = get_current_user_id();
if ( $user_id == $EM_Event->event_owner ){
?> 
<?php
if (isset($_POST['submit'])) {
      $i = 1;
   while ($i < 13) {                
    if (isset($_POST['deleteimage'.$i])) {
        $value = $_POST['deleteimage'.$i];
        if ($value !== '') {
            wp_delete_attachment($value);
        }                       
    }               
$i++;
}
}

$args = array(
'order'          => 'ASC',
'orderby'        => 'menu_order',
'post_type'      => 'attachment',
'post_parent'    => $post->ID,
'post_mime_type' => 'image',
'post_status'    => null,
'numberposts'    => -1,
);              
$images = get_posts( $args );
$imagenum=0;
foreach($images as $image):
$imagenum++;

?>
            <div style="width:110px; float:left;">
    <?php echo wp_get_attachment_image($image->ID, 'thumbnail'); ?><br>
                <?php echo $image->ID; ?>
                <?php echo '<input type="checkbox" name="deleteimage'.$imagenum. '"        value="'.$image->ID.'" />Delete Image'; ?>
            </div>
       <?php endforeach; ?>
        <form><input type="submit" value="click submit" name="submit" />    </form>
  <?php } ?>
3
Adzay

Sie können dies über Ajax tun. Lassen Sie uns zunächst Ihre aktuelle Funktion folgendermaßen ändern:

<?php 

$args = array(
    'order'          => 'ASC',
            'orderby'        => 'menu_order',
            'post_type'      => 'attachment',
            'post_parent'    => $post->ID,
            'post_mime_type' => 'image',
            'post_status'    => null,
            'numberposts'    => -1,
    );          

$images = get_posts( $args );
$imagenum=0;
foreach($images as $image):
    $imagenum++;
?>

<div style="width:110px; float:left;">
<?php echo wp_get_attachment_image( $image->ID, $size = 'thumbnail', $icon = false, $attr = '' ); ?><br>
<?php echo '<input type="checkbox" id="selected" name="image'.$imagenum.'" value="'.$image->ID.'" />Delete Image'; ?>
</div>
<?php endforeach; ?>    
<input type="submit" id="submit" value="click submit" name="submit" />
<input type="hidden" value="" id="ids" />

Fügen Sie unter Ihrer Seite oder in footer.php Folgendes hinzu:

<script>

jQuery('#submit').click(function() {

jQuery('#ids').val('');
var content = jQuery('body').find('#selected');

jQuery(content).each(function (i) {

    t = jQuery(this).val();

    if (jQuery(this).attr('checked')=='checked') { 
        jQuery('#ids').val(function(i,val){
        return val + t + ',';
        }); 
    };

});

var $ids = jQuery('#ids').val();

jQuery.ajax({
    type        : 'POST',
    url         : '<?php echo admin_url('admin-ajax.php'); ?>',
    data        : { action : 'front_delete', Delete: $ids, postID: <?php echo $post->ID; ?> },
    success     : function(response) {
        if (response = 'reload') { location.reload(); } else { alert(response); }
        }
    });  
});
</script>

Fügen Sie in die Datei functions.php den folgenden Code ein:

add_action('wp_ajax_nopriv_front_delete', 'front_delete');
add_action('wp_ajax_front_delete', 'front_delete');

function front_delete() {
    if (!isset($_REQUEST['postID']))
        echo 'Post ID not coming...';

    if (isset($_REQUEST['Delete'])) {

        $sel = explode(',', $_REQUEST['Delete']);
        foreach ($sel as $key) {
            if ($key != '' || $key != '0')
                wp_delete_attachment( $key );
            if (false === wp_delete_attachment( $key ))
                echo 'Image not deleted or error';
        } echo 'reload';
    } else { echo 'No ID coming from your function'; }
die();
}   

Wenn du es verstehen willst, kann ich dir erklären ... ich bin mir nicht sicher, ob du es willst ... :)

3
Santoro

Jede ID muss eindeutig sein, damit das Kontrollkästchen für Ihr Bild nur die ID für das erste Bild anstelle aller Bilder verwendet. Damit dieser Code funktioniert, müssen Sie nur die ausgewählte ID in eine ausgewählte Klasse ändern. Dies bedeutet, dass der Code für alle Artikel verwendet wird, nicht nur für einen.

In der Codeänderung entferne id = "selected" und ersetze mit class = "selected"

Entfernen Sie in dem Skript, in dem es den Befehl find enthält, "#selected" und ersetzen Sie es durch ".selected".

0