在Wordpress中导出CSV文件

时间:2014-03-07 08:53:56

标签: php wordpress csv

我的设置上有一个按钮,一旦点击它就会提示下载一个csv文件。这是代码。

<?php

/** Step 2 (from text above). */
add_action( 'admin_menu', 'my_plugin_menu' );

/** Step 1. */
function my_plugin_menu() {
    add_options_page( 'Members Log Data', 
                      'Members Log', 
                      'manage_options', 
                      'sj-member-option', 
                      'members_option' );
}

/** Step 3. */
function members_option() {
    if ( !current_user_can( 'manage_options' ) )  
    {
        wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
    }
    $name = "member-log-".date('Y-m-d');
    $list[] = array('username','no of favorites');

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename=' . $name);

    $op = fopen('php://output','w');
    foreach($list as $row)
    {
        fputcsv($op,$row);
    }
    fclose($op);
    /*
    echo '<div class="wrap">';
    echo '<p>Here is where the form would go if I actually had options.</p>';
    echo '</div>';
    */
}

我无法修改会话标题。

我想问一下如何在WP中做这个,因为我不熟悉它。

1 个答案:

答案 0 :(得分:0)

您试图发送header命令太晚,因此错误。使用钩子load-(your_page)进行此类输出。

function my_plugin_menu() {
    $page = add_options_page( 'Members Log Data', 
                      'Members Log', 
                      'manage_options', 
                      'sj-member-option', 
                      'members_option' );
     add_action( "load-$page", 'do_export' );
}

members_option函数回调中添加一个带有提交按钮的<form>,并在新的do_export函数中添加导出操作。像bellow一样,注意我没有检查nonce,但是为了安全性最佳实践,你应该这样做,而不是检查$_POST['submit']

function members_option() {
    if ( !current_user_can( 'manage_options' ) )  
    {
        wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
    }
    ?>
        <form method='post' >
            <p class="submit">
                <?php wp_nonce_field('my-import'); ?>
                <input type='submit' name='submit' value='Restore'/>
            </p>
        </form> 
    <?php 
}

function do_export() { 
    if( isset( $_POST['submit'] ) && 'Restore' == $_POST['submit'] )
    {
        $name = "member-log-".date('Y-m-d');
        $list[] = array('username','no of favorites');
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename=' . $name);

        $op = fopen('php://output','w');
        foreach($list as $row)
        {
            fputcsv($op,$row);
        }
        fclose($op);
    }
}

在我的测试中,导出结果是一个HTML文件,其中包含页面的全部内容以及您定义的'username','no of favorites',但这是另一个问题/研究的问题。