web-dev-qa-db-ja.com

フロントエンドから添付ファイルを削除

私のサイトにはたくさんの作家がいるので、私は私の投稿のフロントエンドに簡単なメディアマネージャーを作ることを試みています。私は彼らが自分の投稿にアップロードした写真の添付ファイルを削除できるようにしたいと思います(私はこれをモバイル互換にしたいので、メディアマネージャにアクセスする必要はありません)。

私のオンライン研究から、私はうまくいかない次のようなコードを思いついた。画像を削除するかどうかを確認するチェックボックスと共にサムネイルが表示されますが、送信を押すとページがリロードされ、変更は表示されません(添付ファイルは削除されていません)。

あなたは私がこれを機能させるために私を助けてもらえますか?

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

あなたはajaxを通してそれをすることができます、最初に、あなたの現在の関数をこれに変えましょう:

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

あなたのページの下、またはfooter.phpにこれを追加してください:

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

あなたのテーマのfunctions.phpの中にこのコードを貼り付けてください:

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();
}   

あなたがそれを理解したいならば、私は説明することができます...あなたがそれを望むかどうかわからない... :)

3
Santoro

各IDは一意である必要があるので、あなたの画像のチェックボックスはそれらのすべてではなく最初の画像にIDを適用するだけです。このコードを機能させるには、選択したIDを選択したクラスに変更するだけです。つまり、コードは1つだけではなくすべての項目に使用されます。

コードの変更で、id = "selected"を削除し、class = "selected"に置き換えます。

Findコマンドを含むスクリプトで、「#selected」を削除して「.selected」に置き換えます。

0