https://github.com/sectsect/google-spreadsheet-to-db
Integrates Google Sheets API to fetch data and store it in a WordPress database - An alternative to CSV Import
https://github.com/sectsect/google-spreadsheet-to-db
csv-import google-api google-spreadsheet sheets-api spreadsheet wordpress wordpress-plugin wpdb
Last synced: 2 months ago
JSON representation
Integrates Google Sheets API to fetch data and store it in a WordPress database - An alternative to CSV Import
- Host: GitHub
- URL: https://github.com/sectsect/google-spreadsheet-to-db
- Owner: sectsect
- License: gpl-3.0
- Created: 2017-07-23T13:22:18.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-08-24T05:55:09.000Z (7 months ago)
- Last Synced: 2025-10-06T20:55:55.156Z (6 months ago)
- Topics: csv-import, google-api, google-spreadsheet, sheets-api, spreadsheet, wordpress, wordpress-plugin, wpdb
- Language: PHP
- Homepage:
- Size: 3.42 MB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
#
Google Spreadsheet to DB
[](https://github.com/sectsect/google-spreadsheet-to-db/actions/workflows/plugin-check.yml) [](https://github.com/sectsect/google-spreadsheet-to-db/actions/workflows/phpunit.yml) [](https://github.com/sectsect/google-spreadsheet-to-db/actions/workflows/phpstan.yml) [](https://github.com/sectsect/google-spreadsheet-to-db/actions/workflows/phpcs.yml) [](//packagist.org/packages/sectsect/google-spreadsheet-to-db)
### The "Google Spreadsheet to DB" plugin is designed for WordPress and facilitates the import of data from Google Sheets into a WordPress database using Google's [Sheets API](https://developers.google.com/sheets/api) (v4). It supports data manipulation before saving and is configurable via a WordPress admin interface.
## Features
- Data Import: Pulls data from Google Sheets and saves it directly into the WordPress database.
- Customization: Offers settings for defining constants, spreadsheet IDs, names, and configuring data formats.
- Admin Interface: Provides an admin page for easy management and configuration of the plugin settings.
## Requirements
- PHP version 8.0 or higher.
- [Composer](https://getcomposer.org/) for managing PHP dependencies.
## Get Started
##### 1. Clone this Repo into your `wp-content/plugins` directory.
```sh
cd /path-to-your/wp-content/plugins/
git clone git@github.com:sectsect/google-spreadsheet-to-db.git
```
##### 2. Remove `vendor/` in `.gitignore` file.
```sh
cd google-spreadsheet-to-db
nano .gitignore
```
```diff
- vendor/
```
##### 3. Install composer packages
```sh
cd functions/composer/
composer install
```
##### 4. Activate the plugin through the 'Plugins' menu in WordPress.
## Settings
### Getting Your Spreadsheet Ready for Programmatic Access
By default, a new spreadsheet cannot be accessed via Google’s API. We’ll need to go to your Google APIs console and create a new project and set it up to expose your Spreadsheets’ data.
1. Go to the [Google APIs Console](https://console.developers.google.com/).
2. Create a new project.
3. Click Enable API. Search for and enable the Google Sheets API.
4. Create credentials for a Web Server to access Application Data.
5. Name the service account and grant it a Project Role of Editor.
6. Download the JSON file.
7. Copy the JSON file to your app directory and rename it to `client_secret.json`
8. :warning: Set `client_secret.json` in a location to deny web access on your server.
We now have a big chunk of authentication information, including what Google calls a `client_email`, which uniquely represents this OAuth service account.
Grab the value of `client_email` from your `client_secret.json`, and head back to your spreadsheet. Click the Share button in the top right, and paste the `client_email` value into the field to give it edit rights.
Hit send. That’s it! :ok_hand:
1. Set the `define()` constants for client_secret.json in wp-config.php.
```php
define( 'GOOGLE_SS2DB_CLIENT_SECRET_PATH', '/path/to/your/client_secret.json' );
```
2. Go to `Settings` -> `Google Spreadsheet to DB` on your WordPress Admin-Panel.
3. Set the following values and save it once.
- Data format to be stored in database
- json_encode
- json_encode (JSON_UNESCAPED_UNICODE)
4. Click the `Import from Google Spreadsheet` button. :tada:
- Spreadsheet ID
- Spreadsheet name (Optional)
- Single Sheet name
- Top Header Row
- Title (Optional)
## Filters
### Filtering the Array
You can edit the array got from Google API with `add_filter( 'google_ss2db_before_save', $function_to_add )` in your functions.php before saving to database.
```php
add_filter( 'google_ss2db_before_save', function ( $row, $worksheet_id, $worksheet_name, $sheet_name ) {
// Example
if ( $worksheet_name === 'My Spreadsheet' && $sheet_name === 'Sheet1' ) {
// Do something.
return $something;
}
return $row;
}, 10, 3 );
```
And also use `add_filter('google_ss2db_after_save', $return_array )` to perform any processing with the return value.
```php
add_filter( 'google_ss2db_after_save', function ( $data ) {
if ( 'My Spreadsheet' === $data['worksheet_name'] ) {
// $id = $data['id'];
// $date = $data['date'];
// $title = $data['title'];
// $value = $data['value'];
// $work_sheet_id = $data['worksheet_id'];
// $work_sheet_name = $data['worksheet_name'];
// $sheet_name = $data['sheet_name'];
// $result = $data['result']; // `int|false` The number of rows inserted, or false on error.
// Example
my_callback( $data );
}
});
```
## APIs
```php
new Google_Spreadsheet_To_DB_Query();
```
#### Parameters
| Parameter | | | Type | Notes | Default Value |
| --------- | -------- | ------- | ------ | ------------------------------------------ | ------------- |
| where | | | array | | `array()` |
| | relation | | string | `AND` or `OR` | `AND` |
| | [array] | | array | | |
| | | key | string | `id` or `date` or `worksheet_id` or `worksheet_name` or `sheet_name` or `title` | `false` |
| | | value | int | e.g. `3` / `2020-09-01 12:00:00` | `false` |
| | | compare | string | e.g. `=` `>` `<` `>=` `<=` `<>` `!=` | `=` |
| orderby | | | string | `id` or `date` or `worksheet_id` or `worksheet_name` or `sheet_name` or `title` | `date` |
| order | | | string | `DESC` or `ASC` | `DESC` |
| limit | | | int | number of row to get | All Data
:memo: You can also use `-1` to get all data. |
| offset | | | int | number of row to displace or pass over | `0` |
## Usage Example
#### Get all rows
```php
$sheet = new Google_Spreadsheet_To_DB_Query();
$rows = $sheet->getrow();
foreach ( $rows as $row ) {
$id = $row->id;
$date = $row->date;
$val = json_decode( $row->value );
}
```
#### Get 3 rows from the 4th in ascending order by ID
```php
$args = array(
'orderby' => 'id',
'order' => 'ASC',
'limit' => 3,
'offset' => 3,
);
$sheet = new Google_Spreadsheet_To_DB_Query( $args );
$rows = $sheet->getrow();
foreach ( $rows as $row ) {
$id = $row->id;
$date = $row->date;
$val = json_decode( $row->value );
}
```
#### Get the row with specific ID
```php
$args = array(
'where' => array(
array(
'key' => 'id',
'value' => 3,
)
),
);
```
#### Get 3 rows with specific Worksheet ordered by ID
```php
$args = array(
'orderby' => 'id',
'order' => 'ASC',
'limit' => 3,
'where' => array(
array(
'key' => 'worksheet_name',
'value' => 'My Spreadsheet',
'compare' => '='
),
),
);
```
#### Get the rows larger than or equal the specified datetime
```php
$args = array(
'where' => array(
array(
'key' => 'date',
'value' => '2020-08-01 12:34:56',
'compare' => '>=',
)
),
);
```
#### Get the rows with multiple conditions
```php
$args = array(
'orderby' => 'id',
'order' => 'DESC',
'limit' => 10,
'offset' => 10,
'where' => array(
'relation' => 'AND', // or 'OR'
array(
'key' => 'date',
'value' => '2020-08-01 12:34:56',
'compare' => '>='
),
array(
'key' => 'worksheet_name',
'value' => 'My Spreadsheet',
'compare' => '='
),
),
);
```
## Notes
* Tested on WordPress v6.3.1
## For Developers
* This plugin saves Spreadsheet's data to the global area, not to each post. If you want to have Spredsheet data for individual posts, you can link data `ID` with custom fields.
* The data is added and stored in the `wp_google_ss2db` table as a JSON-encoded array.
id
date
worksheet_id
worksheet_name
sheet_name
title
value
1
2021-08-27 00:00:00
1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms
My Spreadsheet
Sheet1
Data-01
{"area":{"a":["brooklyn","bronx","Queens","Manhattan"],"b":["brooklyn","bronx","Queens","Manhattan"]}}
* This Plugin does not hosting on the [wordpress.org](https://wordpress.org/) repo in order to prevent a flood of support requests from wide audience.
## Debug Mode
To enable debug mode, add the following constant to your `wp-config.php`:
```php
define( 'GOOGLE_SS2DB_DEBUG', true );
```
When debug mode is enabled, importing a spreadsheet will return a detailed JSON response instead of the usual redirect. The response includes the following information:
- `result`: A boolean indicating the success or failure of the process
- `data`: Details of the saved data
- `post_data`: Sanitized post data
- `referer`: The redirect URL
**Note**: Always set `GOOGLE_SS2DB_DEBUG` to `false` or remove the constant in production environments.
## Troubleshooting
This plugin depends on [Guzzle](https://github.com/guzzle/guzzle) **v7**, which may conflict with other WordPress plugins or Composer packages using Guzzle **v6**.
If you encounter errors like:
> `Uncaught Error: Call to undefined method GuzzleHttp\Utils::chooseHandler()`
This is likely due to a Guzzle version conflict. To resolve:
1. Update other plugins/packages to versions compatible with Guzzle v7
2. Find alternative solutions that don't conflict with this plugin's dependencies
## Change log
See [CHANGELOG](https://github.com/sectsect/google-spreadsheet-to-db/blob/master/CHANGELOG.md) file.
## License
See [LICENSE](https://github.com/sectsect/google-spreadsheet-to-db/blob/master/LICENSE) file.
✌️
A little project by @sectsect