2017-07-10 3 views
1

ワードプレス管理パネルでボタンを押すと、次のコードが表示されます。これにより、「ss-stock export-csv」というcsvファイルが開きます。CSVをサーバーに保存する

私のアップロードディレクトリのwp-content/uploads/exports/にこのファイルをサーバに保存するにはどうすればよいですか?私はfile_put_contentsを使用しようとしましたが、それは正しく動作していないようです。 CSVファイルは正しい場所に表示されますが、空白です。おそらく何か私の$outputに間違っていますか?

<?php 
function generate_stock_report_csv() { 
    // output headers so that the file is downloaded rather than displayed 
    header('Content-Type: text/csv; charset=utf-8'); 
    // set file name with current date 
    header('Content-Disposition: attachment; filename=ss-stock-export.csv'); 
    // create a file pointer connected to the output stream 
    $output = fopen('php://output', 'w'); 
    // set the column headers for the csv 
    $headings = array('sku', 'qty', 'is_in_stock'); 
    // output the column headings 
    fputcsv($output, $headings); 
    // get all simple products where stock is managed 

    // get all product variations where stock is managed 
    $args = array(
     'post_type'   => 'product_variation', 
     'post_status'  => 'publish', 
     'posts_per_page' => -1, 
     'orderby'   => 'title', 
     'order'    => 'ASC', 
     'meta_query' => array(
      array(
       'key'  => '_stock', 
       'value'  => array('', false, null), 
       'compare' => 'NOT IN' 
      ) 
     ) 
    ); 

    $loop = new WP_Query($args); 
    while ($loop->have_posts()) : $loop->the_post(); 
     $product = new WC_Product_Variation($loop->post->ID); 
     $ss_sku = get_post_meta($product->variation_id, 'ss_sku', true); 
     $stock = $product->stock; 
     settype($stock, "integer"); 
     if ($stock > 0){ $stock_status = 1;} else {$stock_status = 0;} 
     $row = array($ss_sku , $product->stock, $stock_status); 
     fputcsv($output, $row); 
    endwhile; 
    $filename = "ss-stock-export.csv"; // Trying to save file in server 
    file_put_contents(ABSPATH . "wp-content/uploads/exports/" . $filename, $output); 
} ?> 
+0

をしましたか?あなたのエクスポートフォルダはこれに関連しています... –

答えて

0

これは、スクリプトがで実行されているどのようなフォルダトリック

 $csv = "sku,qty,is_in_stock \n";//Column headers 
     $args = array(
      'post_type'   => 'product_variation', 
      'post_status'  => 'publish', 
      'posts_per_page' => -1, 
      'orderby'   => 'title', 
      'order'    => 'ASC', 
      'meta_query' => array(
       array(
        'key'  => '_stock', 
        'value'  => array('', false, null), 
        'compare' => 'NOT IN' 
       ) 
      ) 
     ); 

     $loop = new WP_Query($args); 
     while ($loop->have_posts()) : $loop->the_post(); 
      $product = new WC_Product_Variation($loop->post->ID); 
      $ss_sku = get_post_meta($product->variation_id, 'ss_sku', true); 
      $stock = $product->stock; 
      settype($stock, "integer"); 
      if ($stock > 0){ $stock_status = 1;} else {$stock_status = 0;} 
      $row = array($ss_sku , $product->stock, $stock_status); 
      $row_array= array($row); 
       foreach ($row_array as $record){ 
       $csv.= $record[0].','.$record[1].','.$record[2]."\n"; //Append data to csv 
       } 
     endwhile; 
     $csv_handler = fopen ('ss-stock-export.csv','w'); 
     fwrite ($csv_handler,$csv); 
     fclose ($csv_handler); 
     file_put_contents(ABSPATH . "wp-content/uploads/exports/ss-stock-export.csv", $csv);  
     } 
1

あなたはfile_put_contentsへの絶対パスを渡すためにwp-config.phpで定義されたABSPATH定数を使用することができます。そうすれば、どこからスクリプトを実行しているかは問題ではありません。

file_put_contents(ABSPATH . "wp-content/uploads/exports/" . $filename, $output); 
関連する問題