WP_REDIRECT发出警告:无法修改标题信息-自定义插件

时间:2015-05-25 作者:dea

我正在尝试在自定义插件中执行删除操作,该插件使用自定义表并扩展wp\\u list\\u表以显示数据。问题是,每当我试图删除得到的数据时,都无法修改标题信息,我不知道如何修复它。代码:

    function process_bulk_action() {

    //Detect when a bulk action is being triggered
    if (\'delete\' === $this->current_action() ) {
        // In our file that handles the request, verify the nonce.
        $nonce = $_REQUEST[\'_wpnonce\'];

        if ( !wp_verify_nonce( $nonce, \'bsp_delete_student\' ) ) {
            die( \'Invalid security check!\' );
        }
        else {
            self::delete_student( absint( $_GET[\'student\'] ) );

            wp_redirect( esc_url( add_query_arg() ) );
            exit;
        }
    }

    // If the delete bulk action is triggered
    if ( ( isset( $_POST[\'action\'] ) && $_POST[\'action\'] == \'delete\' )
         || ( isset( $_POST[\'action2\'] ) && $_POST[\'action2\'] == \'delete\' )
    ) {

        $delete_ids = esc_sql( $_POST[\'delete\'] );

        // loop over the array of record IDs and delete them
        foreach ($delete_ids as $id ) {
            self::delete_student( $id );

        }
        wp_redirect( esc_url( add_query_arg() ) );
        exit;
    }
}
然后,我有一个删除功能:

    function delete_student($id){
    global $wpdb;
    $wpdb->delete("{$wpdb->prefix}students",
        [ \'students_id\' => $id ],
        [ \'%d\' ]
    );
}
当我注释掉nonce检查时(它不起作用,总是给我“无效的安全检查!”)并尝试删除我得到的无法修改标题信息的学生,并且所选行未被删除。有什么建议吗?

3 个回复
SO网友:appartisan

在Wordpress处理已发送的文件头时(不知道确切原因),您无法在process\\u bulk\\u actions()调用内重定向。您只需编写一条消息,并使用wp\\u die($message)代替die()。

当您使用批量操作时,Wordpress会将该操作重定向到显示列表的文件,并且只有在process\\u bulk\\u actions()中使用wp\\u die()时,该文件才会显示您的消息。

此外,如果要使用常规操作(而不是批量操作),如编辑|删除,则可以在创建列表对象并调用prepare\\u items()之前使用类似的操作:

[请注意,此代码不在列表类文件中,而是在使用它的文件中,即显示表的文件中]

// modify yourslug to fit what you defined in construct \'singular\' item
// modify my-edit-file.php with the name of the file which is going to handle
// your edit or delete action.
// $itemId will be received and used by my-edit-file.php

    if(isset($_REQUEST[\'action\']) && $_REQUEST[\'action\'] === \'edit\'){
        $itemId = filter_input(INPUT_GET, \'yourslug\', FILTER_VALIDATE_INT);

        require_once(plugin_dir_path(__FILE__) . \'my-edit-file.php\');
        wp_die();
    }
$table = new MyObjectListTable();
$table->prepare_items();

SO网友:Domain

尝试以下代码。

add_action(\'init\', \'start_buffer_output\');
function start_buffer_output() {
        ob_start();
}

SO网友:Emin Özlem

尝试wp_safe_redirect() 看看它是否对你有用,它为你做消毒

结束

相关推荐