サポート » 使い方全般 » ajaxでカウントとリダイレクトを同時に行いたい

  • お世話になります。
    表題のとおりですが、「ダウンロード」ボタンが押されたらページは遷移せずにカスタムフィールドの数値を追加し、画像をダウンロードできるようにしたいと考えています。
    カスタムフィールドはAdvanced Custom Fieldsを使用しております。

    現在のコード:

    【single.php】

    <script>
    $(function(){
    	$('.download').on("click", function() {
    		var url_add = $('.download').attr('data-url');
    		var post_id = $('.download').attr('data-id');
    		var ajaxurl = '<?php echo admin_url('admin-ajax.php', __FILE__); ?>';
    		
    		if(url_add && post_id){
                    $.ajax({
                        dataType: "text",
                        url:ajaxurl,
                        type: 'POST',
                        data:{
                            'action': 'countDL',
                            'urladd':url_add,
                            'postid':post_id
                        }
                    })
                    // Ajax成功した時
                    .done( (data) => {
    
                    })
                    // Ajax失敗した時
                    .fail( (data) => {
                        alert('ダウンロードに失敗しました。再度お試しください。')
                    })
            }
    	});
    });
    </script>
    		<?php //画像はdownload_pic、カウンタはdouwnload_countと付けています。
    		$download_pic=get_field('download_pic');
                    ?>
                    <img src="<?php echo $download_pic['url']; ?>" alt="">
                    <div class="download" data-id="<?php the_ID(); ?>" data-url="<?php echo $download_pic['url']; ?>">Download</div>
    

    【functions.php】

    function countDL() {
          $postid=$_POST['postid'];
          $filename=$_POST['urladd'];
          $num=get_post_meta($postid, 'download_count', true);
          $num++;
          update_field('download_count', $num, $postid);
          
          if(file_exists($filename)){
          	wp_redirect($filename);
          	exit;
          }
       }
    add_action('wp_ajax_nopriv_countDL','countDL');
    add_action('wp_ajax_countDL','countDL');

    上記の内容で、「Download」を押すとカウントはされるようになったのですが、画像のダウンロードができません。
    functions.php内で$filenameはきちんと取得できているようです。
    .done( (data) => {}
    内にwindow.locationで新しいページを開いてリダイレクトさせてみたり(ウィンドウがブロックされるのでNG)、PHPのheader Locationでリダイレクトさせてみたり(無反応)いろいろ試したのですが駄目でした。
    一番良さそうだったのがaタグにdownload属性をつけることでしたが、aタグを付けてしまうとそちらに処理が移ってしまう?のかカウントが効かなくなった+safariで使えないということだったので諦めました。

    良き解決方法をご教示ください。
    諸々細かいところツッコミはあると思いますがよろしくお願いいたします。

  • トピック「ajaxでカウントとリダイレクトを同時に行いたい」には新たに返信することはできません。