moderntribe / tribe-storage
A WordPress plugin to upload files to many different storage types like Azure, s3, DO Spaces
Installs: 1 057
Dependents: 2
Suggesters: 0
Security: 0
Stars: 5
Watchers: 14
Forks: 0
Open Issues: 0
Type:wordpress-plugin
Requires
- php: >=7.4
- intervention/image: ^2.5
- jhofm/flysystem-iterator: ^2.2
- league/flysystem-azure-blob-storage: ^1.0
- league/flysystem-cached-adapter: ^1.1
- moderntribe/flysystem-stream-wrapper: ^2.0
- php-di/php-di: ^6.0
- symfony/lock: ^5.2
Requires (Dev)
- ext-exif: *
- brain/monkey: 2.*
- moderntribe/coding-standards: ^2.0
- nunomaduro/collision: ^5.10
- php-mock/php-mock-mockery: ^1.3
- phpunit/phpunit: ^9
- wp-cli/wp-cli-bundle: ^2.4
This package is auto-updated.
Last update: 2024-10-30 21:26:47 UTC
README
This WordPress plugin works as a bridge to use Flysystem adapters (v1) within WordPress. This plugin is meant to be installed and configured by developers, as it has no GUI.
Currently Supported Adapters
Recommendations
It is highly recommended to set your WP_CONTENT_URL
to the base site on a multisite installation.
In wp-config.php
:
function tribe_isSSL(): bool { return ( ! empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ); } $host = $_SERVER['HTTP_HOST'] ?? 'localhost'; define( 'WP_CONTENT_URL', ( tribe_isSSL() ? 'https' : 'http' ) . '://' . $host . '/wp-content' );
Installation
Requirements
- PHP7.4+
- WordPress 5.6+
- Composer
- Composer Installers
- The server should have PHP compiled with ImageMagick or GD.
Install with Composer v1
Add the following to the composer.json repositories object:
"repositories": [ { "type": "vcs", "url": "git@github.com:moderntribe/flysystem-stream-wrapper.git" }, { "type": "vcs", "url": "git@github.com:moderntribe/tribe-storage.git" }, ]
Then run:
composer require moderntribe/tribe-storage
Adapters
Adapters allow different interfaces to different storage providers. In order to tell the system which adapter to use,
add a TRIBE_STORAGE_ADAPTER
define() to wp-config.php
with the namespaced path to the adapter
(same output as Class_Name::class)
, e.g to use the Azure Storage Adapter:
define( 'TRIBE_STORAGE_ADAPTER', 'Tribe\Storage\Adapters\Azure_Adapter' );
Local Adapter
This is the default adapter and is pointed to WP_CONTENT_DIR . /uploads
. If you have not configured any custom
adapters, this will automatically be used and should function exactly as WordPress does out of the box.
NOTE: A misconfigured adapter will always use the Local Adapter and show a notice in the WordPress Dashboard.
Azure Storage Adapter
To configure this Adapter, add and customize the following defines to your wp-config.php
:
// Account name as you created it in the Azure dashboard. define( 'MICROSOFT_AZURE_ACCOUNT_NAME', 'account' ); // Account secret key to authenticate. define( 'MICROSOFT_AZURE_ACCOUNT_KEY', 'key' ); // The container name. define( 'MICROSOFT_AZURE_CONTAINER', 'my_container' ); // The custom adapter namespaced path to the adapter. define( 'TRIBE_STORAGE_ADAPTER', 'Tribe\Storage\Adapters\Azure_Adapter' ); // The URL/CNAME to use for the adapter. define( 'TRIBE_STORAGE_URL', 'https://example.com/wp-content/uploads/' . MICROSOFT_AZURE_CONTAINER );
Image Editor Customization
Force a custom Image Editor Strategy if Imagick or GD are experiencing issues like 500 errors with no logs.
// For GD define( 'TRIBE_STORAGE_IMAGE_EDITOR', 'gd' ); // For Imagick define( 'TRIBE_STORAGE_IMAGE_EDITOR', 'imagick' );
Caching
Transient Database Caching (default)
Caching is saved via WordPress transients, automatically forced to use the database even if external object caching is available. The Flysystem cache adapters unfortunately save the entire output into a single key.
If you're using Redis or Memcached (with a much greater than a 1mb limit), you can disable this with:
// Store transients in the object cache instead of the database. add_filter( 'tribe/storage/config/cache/force_db', '__return_false' );
Disable Caching
If you have any issues with the cache, you can disable it by adding the following to wp-config.php
:
define( 'TRIBE_STORAGE_NO_CACHE', true );
Automated Testing
Testing provided via PHPUnit and the Brain Monkey testing suite.
Run Unit Tests
$ composer install $ ./vendor/bin/phpunit
Adding Flysystem Adapters
Create a Flysystem bridge. See /src/Adapters/Adapter.php.
Adapter::get(): AdapterInterface;
The get()
method should return a configured Flysystem adapter.