Modules and Plugins with Known Issues

A list of Drupal modules and WordPress plugins that are not supported and/or require workarounds.


This article lists modules and plugins that may not function as expected or are currently problematic on the Pantheon platform. This is not a comprehensive list. We continually update it as problems are reported and/or solved. If you are aware of any modules or plugins that do not work as expected, please contact support.

We do not prevent you from installing and using these plugins/modules; however, they may not work as expected and we cannot provide troubleshooting support.

Plugin & Module Maintainers: If your work is listed here, please reach out to us; we're happy to help provide information that can lead to conflict resolutions between your code and the platform. If your work is already updated but still listed here, let us know so we can remove it, or submit a pull request.

Drupal Modules


APC - Alternative PHP Cache

Issue: APC is in-memory and limited to a single instance. It cannot span multiple server environments.

Solution: Pantheon recommends Redis as a caching backend, which has better performance.


Adaptive Image Styles

Issue: This module requires edits to the nginx.conf which is not currently supported on the platform. See Platform Considerations and https://www.drupal.org/node/1669182.


Apache Solr Multilingual

Issue: When the Apache Solr Multilingual module is enabled, the default class variable set by the Pantheon Apache Solr module is changed, and the site will be unable to connect to the Solr server.

If you have already enabled the Apache Solr Multilingual module and found that your site can no longer connect to the Solr server, you will need to first disable and uninstall the module. Next, disable and re-enable the Pantheon Apache Solr module. This will add the class variable back so your site can connect to the Solr server again.


Acquia Search

Issue: If Acquia Solr modules are present in the site codebase (even if disabled) and Pantheon Apache Solr is enabled, the site will be unable to connect to Solr server.

Solution: Delete the Acquia Solr modules from the codebase and then disable and re-enable the Pantheon Apache Solr module.


Background Process

Issue: The module allows for Drupal to perform "parallel" (asynchronous non-blocking mode) requests. However, there are a number of limitations working in a distributed environment and function correctly on the platform. See https://www.drupal.org/node/2233843.


Backup and Migrate

Issue: The Backup and Migrate module can create large archives and cause issues with the tools in the Database / Files tab of the Dashboard. See Backup Creation.

Solution: You can use the automated backups that are available on the Dashboard for each environment. If you want to access your backups and copy it to your own repository (Amazon S3, FTP server, etc), consider using a bash script. You can do that by running it in your local system, or use an external server, or a service that runs cron jobs for you. See Access Backups for more details.


Basic HTTP Authentication - Drupal 7 only

Issue: This contrib module conflicts with Pantheon's Security tool when both are enabled on Drupal 7 sites, resulting in 403 errors.

Solution: Lock the environment via Pantheon's Security tool or via the module, not both. For details, see Security on the Pantheon Dashboard.


BigPipe

Issue: The Pantheon Edge layer buffers text output, and BigPipe depends on being able to stream text output. Since BigPipe provides no benefit on Pantheon sites, we recommend disabling it.


Boost

Issue: Boost is an unnecessary caching layer that may cause issues. Every site on Pantheon can leverage our robust page caching infrastructure that returns pages for anonymous visitors at the highest possible performance. See Pantheon's Global CDN.


Cache Expiration

Issue: This module doesn't support Pantheon's granular cache clearing and header system.

Solution: Install the Pantheon Advanced Page Cache module to dynamically purge content from cache on content update.


CKFinder

Issue: If you follow the installation instructions for CKFinder, the $baseUrl path is not correctly set and will not recognize any path set via CKFinder. See this Drupal.org issue.

Solution: Manually edit the ckfinder/config.php file and edit the following line to the desired path:

$baseUrl = '/ckfinder/userfiles/';

Composer Manager

This module has been deprecated by its authors. The suggestions made below are not guaranteed to be successful in all use cases.

Issue: Composer Manager expects write access to the site's codebase via SFTP, which is prevented in Test and Live environments on Pantheon by design.

Solution: As suggested within the module documentation, manage dependencies in Dev exclusively. Place the following configuration within settings.php to disable autobuild on Pantheon. This will also set appropriate file paths for Composer so that checks to see if the path is writable will not fail. Packages, however, are stored within the root directory of the site's codebase and version controlled:

if (isset($_ENV['PANTHEON_ENVIRONMENT'])) {
  # Set appropriate paths for Composer Manager
  $conf['composer_manager_file_dir'] = 'private://composer';
  $conf['composer_manager_vendor_dir'] = $_SERVER['HOME'] . '/code/vendor';
  # Disable autobuild on Pantheon
  $conf['composer_manager_autobuild_file'] = 0;
  $conf['composer_manager_autobuild_packages'] = 0;
}

You also need to create the directory path sites/default/files/private/composer.

This disables auto-building in all Pantheon environments. This will allow Drush commands such as pm-enable and pm-disable to function correctly in both Git and SFTP modes as Composer Manager will only update packages and the autoloader when explicitly told to do so via drush composer-manager [COMMAND] [OPTIONS] or drush composer-json-rebuild. This is the setting recommended by Pantheon. While composer.json can be rebuilt via Terminus while the DEV site is in SFTP mode, composer install must be run locally, committed via Git, and pushed back to Pantheon.


Fast 404

Issue: Database connection credentials are needed before Drupal bootstrap is invoked and standard MySQL is port hard-coded.

Solution: Pressflow settings can be decoded in settings.php to provide database credentials, but the module needs to be modified manually to use $_ENV(["DB_PORT"]).

Alternatively, Drupal 7 and Drupal 8 cores provide a basic version of this same feature via configuration in settings.php.


Front

Issue: The Drupal 7 version of the module disables caching for the front page.

Solution: Apply a patch to the module to allow caching for anonymous users. Note that this patch doesn't work with the Full or Redirect options.


HTTP Basic Authentication - Drupal 8 (core)

Issue: This Drupal 8 core module conflicts with Pantheon's Security tool when both are enabled, resulting in 403 errors.

Solution: Lock the environment via Pantheon's Security tool or via the module, not both. For details, see Security on the Pantheon Dashboard.


HTTPRL - HTTP Parallel Request & Threading Library

Issue: This module can severely impact performance. This may be the result of module code or its configuration on the platform that results in the spikes.


IMCE 6.x and IMCE 7.x

Issue: Operations on directories containing an inordinate amount of files will likely hit the load balancer timeout threshold (30 seconds).

Solution: One solution is to break up the files into smaller groups so that directories are less populated. Another option is to rewrite imce_image_info() so that your site's caching backend (Database or Redis) is used for operations on highly populated directories:

  1. Enable Redis, otherwise the database cache is utilized. (Depending on your site's configuration, you may not need to enable Redis.)
  2. Edit imce/inc/imce.page.inc and replace the contents of imce_image_info() with:

    $cache_key = 'imce-' . $file;
    $cache = cache_get($cache_key);
    if ($cache) {
    return $cache->data;
    }
    if
    (is_file($file) && ($dot = strrpos($file, '.')) &&
    in_array(strtolower(substr($file, $dot+1)), array('jpg', 'jpeg',
    'gif','png')) && ($info = @getimagesize($file)) &&
    in_array($info[2], array(IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_PNG)) )
    {
    $result = array('width' => $info[0], 'height' => $info[1], 'type' => $info[2], 'mime' => $info['mime']);
    cache_set($cache_key, $result);
    return $result;
    }
    return FALSE;
    }
    
  3. Clear caches on the Dev environment. The first action to populate cache will take longer than subsequent requests.

You can modify this patch according to your needs, such as performing an operation post upload and/or specifying a particular cache bin.

LiveReload

Issue: This module triggers heavy load on the application container as soon as it is enabled and causes pages to time out for anonymous users for Drupal 7 and Drupal 8.


Live CSS

Issue: This module requires write access to the site's codebase for editing CSS files, which is not granted on Test and Live environments by design.


Media

Issue: This module requires the use of the /tmp directory. See Using the tmp Directory section below.


Media: Browser Plus

Issue: This module requires the use of the /tmp directory. See Using the tmp Directory section below.


Mobile Tools

Issue: Conflicts with platform page caches. See this thread for details.


Node export webforms

Issue: This module requires the use of the tmp directory. See Using the tmp Directory section below.

Solution: Use drush, as this uses a single application container to process the export. The relevant drush command is webform-export (alias wfx).

Customers have also reported success by making the export path configurable.


Node Gallery

Issue: Using Node Gallery with Plupload attaches cookies to image uploads for authentication purposes. This conflicts with our page cache configuration as we strip all cookies for images, CSS, and JS files to improve performance.


Pathologic

Issue: The path of the base URL is changed and cached by the module itself.

Solution: The documentation on Drupal.org for the module mentions the issues and the remedy, which is a cache clear operation. If you are unable to exclude cached data from your dumps or avoid migrating cache data, you should clear your site's cache after importing the data.

Additionally, Pathologic can cause the change of base URLs in a domain access configuration based on the value of $options['url'] in the site Drush config. This is set to the first domain listed on an environment by default on Pantheon, which can result in unexpected root domains being written to the cache. See our Drush documentation for more information about overriding this value.

Persistent Login

Issue: This module attaches per-user cookies that conflict with our page cache configuration.

Solution: Follow the remedy provided within the module's documentation of the issue on Drupal.org, which is to alter the code to prefix the cookie name with SESS.


Plupload

Issue: This module requires the use of the /tmp directory. See Using the tmp Directory section below.

Solution: A possible solution is to set the plupload_temporary_uri variable in settings.php. Example:

$conf['plupload_temporary_uri'] ='private://tmp';

You may also need to add this line within the filefield_sources_plupload.module file to run through files/private/tmp every few hours and delete old files to keep it from piling up:

$temp_destination = file_stream_wrapper_uri_normalize('private://tmp/' . $filename);

This will move the temporary upload destination from the individual server mount tmp directory to the shared mount tmp files/private/tmp directory, which should preserve the files between requests.


reCAPTCHA

Issue: If your site is running PHP 5.3, form submissions that use the reCAPTCHA module might continually fail and display the error: The answer you entered for the CAPTCHA was not correct. This is because the default arg_separator.output for PHP 5.3 is & while for PHP 5.5 it is &.

Solution: Override the default arg_separator.output value in settings.php by adding the following line:

ini_set('arg_separator.output', '&');

Registry Rebuild

This is built into the platform. See Drupal Drush Command-Line Utility for details on how to use Registry Rebuild on Pantheon.


Schema

Issue: The module doesn't work with the MySQL TIMESTAMP column type in our heartbeat table, which is part of how we maintain status around whether or not a site and its database is active. This is a known bug in the schema module.

Solution: Set a variable to suppress the error, shown here. Setting the variable schema_suppress_type_warnings to true will do it. You can achieve that by adding the following line to settings.php:

$conf[‘schema_suppress_type_warnings’] = TRUE;

Simple OAuth / OAuth 2.0

Issue: The module requires a very specific set of permissions for the folder and the keys to be uploaded. Using Private or non-standard filepaths won't work. It is not possible to change these in LIVE or TEST environment.

Solution: You can try to patch the permission check in the module. The alternative is to use off-site key management tools like Lockr


Taxonomy CSV

Issue: This module requires the use of the /tmp directory. See Using the tmp Directory section below.


Twig Extensions

Issue: This module uses php-intl, which is not currently supported by Pantheon.


Varnish

Issue: Conflicts with the existing platform configuration.

Solution: Update Drupal performance settings to set the TTL and have the platform page cache serve requests. See Pantheon's Global CDN


Views data export

Issue: This module requires the use of the /tmp directory. See Using the tmp Directory below for more information.

Solution: A possible solution would be to set the export directory in settings.php to a public:// stream wrapper location versus a temporary:// one. Example:

$conf['views_data_export_directory'] = 'public://';

or to a specific directory:

$conf['views_data_export_directory'] = 'public://vde/';

Additionally, the variable can be set using Drush:

drush vset views_data_export_directory 'public://'

Also see Multiple Servers + Batch Database Stream Wrapper (sandbox module).


WordPress Plugins

All-in-One WP Migration

Issue: Full site backups are exported to the wp-content/ai1wm-backups directory, which is tracked in Git. Large backup files tracked in Git can cause problems with platform backups, deploys and other workflows.

The plugin also requires write access to wp-content/plugins/all-in-one-wp-migration/storage, which is not permitted on Test and Live environments on Pantheon by design. For additional details, see Using Extensions That Assume Write Access.

Solution: You can create and download full backups from your Dashboard.

Autoptimize

Issue: Autoptimize assumes write access to the site's codebase within the wp-content/resources directory, which is not granted on Test and Live environments on Pantheon by design. For additional details, see Using Extensions That Assume Write Access.

Solution: Configure Autoptimize to write files within the standard wp-content/uploads path for WordPress (wp-content/uploads/autoptimize) by adding the following to wp-config.php:

/** Changes location where Autoptimize stores optimized files */
define('AUTOPTIMIZE_CACHE_CHILD_DIR','/uploads/autoptimize/');

Be sure to add this configuration above the comment to stop editing:

Autoptimize configuration

For additional details, see the Autoptimize FAQ. An alternative solution is to create a symbolic link.


Better Search And Replace

Issue: Plugin is not accessible in Test or Live (read-only environments in Pantheon) due to the install_plugins capability check of the plugin. Follow this issue on the WordPress support forum.

Solution #1: There is an undocumented filter in place to override the capability check. Adding this in the your theme’s function.php can make it work:

function better_search_replace_cap_override() {
    return 'manage_options';
}
add_filter( 'bsr_capability', 'better_search_replace_cap_override' );

Solution #2: Use an alternative Search and Replace plugin like WP Migrate DB


Bookly

Issue: Sessions are implemented in a way that will not allow it to function with the WP Native Sessions plugin, either installed as a regular plugin or an mu-plugin. Follow this issue on the WordPress support forum.


Issue: A low value set for "Check link every X hours" can consume a large amount of server resources.

Solution: Ensure that the value is set for the default of 72 hours or greater.


Caching Plugins (e.g. Batcache, W3 Total Cache, or WP Super Cache)

Issue: Conflicts with platform-level page caching.

Solution: See Caching: Advanced Topics for details on how to bypass the platform page cache.


Coming Soon

Issue: Maintenance mode gives the ERR_TOO_MANY_REDIRECTS error in the frontend. This plugin uses 503 Header status - Service Temporarily Unavailable which creates a redirect loop. Please see this issue for more details regarding the error.

Solution: This plugin only works in the Coming Soon Mode on Pantheon, and you need to put content into the Page Settings > Message so the Coming Soon page won't appear as a blank white page.

Alternatively, if you don't want your site to be crawled by search engines, you can lock it via the platform and you can use a custom lock page.


Contact Form 7

Issue: This plugin relies on $_SERVER['SERVER_NAME'] and $_SERVER['SERVER_PORT'], which pass static values subject to change over time during routine platform maintenance.

Solution: Add the following to wp-config.php:

$_SERVER['SERVER_NAME'] = $_SERVER['HTTP_HOST'];

if (isset($_ENV['PANTHEON_ENVIRONMENT'])) {
  if (isset($_SERVER['HTTP_USER_AGENT_HTTPS']) && $_SERVER['HTTP_USER_AGENT_HTTPS'] === 'ON') {
    $_SERVER['SERVER_PORT'] = 443;
  }
  else {
    $_SERVER['SERVER_PORT'] = 80;
  }
}

For more details, see SERVER_NAME and SERVER_PORT on Pantheon.


Constant Contact Forms

Issue: The Constant Contact Forms plugin adds dependencies using Composer and provides a .gitignore file which prevents these dependencies from being picked up by Git. This leads to problematic deployments as not all code moves forward to Test and Live.

Solution: Remove .gitignore files from the constant-contact-forms and constant-contact-forms/vendor/psr/log directories.


Event Espresso

Issue: Event Espresso shows the error PHP Fatal error: Uncaught EE_Error: An attempt to access and/or write to a file on the server could not be completed due to a lack of sufficient credentials.

Solution: This plugin is checking the FS_METHOD value. Add the following to wp-config.php, above the line /* That's all, stop editing! Happy Pressing. */:

define('FS_METHOD', 'direct');

EWWW Image Optimizer

Issue: EWWW Image Optimizer attempts to install and execute third party binary tools to perform image optimization, which is restricted on our platform. The error message is:

EWWW Image Optimizer uses jpegtran, optipng, pngout, pngquant, gifsicle, and cwebp. You are missing: jpegtran, optipng, gifsicle. Please install via the Settings Page or the Installation Instructions.

The solutions outlined in the EWWW documentation do not apply to Pantheon.

Solution: Use an alternative plugin like EWWW Image Optimizer Cloud, which is a cloud version of the plugin that executes the compression from an external service instead of the server. Another alternative that works well with the default configuration is Smush Image Compression and Optimization.


Force Login

Issue: This plugin appends a port number using $_SERVER['SERVER_PORT'] at the end of the URL when the user logs in to the site.

Solution: See Set SERVER_PORT Correctly.


Instashow

Issue: The Instashow plugin relies on query parameters that are not compatible with Pantheon's Edge Cache. See PANTHEON_STRIPPED for more information. This inhibits the ability to set the authorization token required to make the plugin function.


Maintenance Mode

Issue: Maintenance Mode causes a redirect loop on all pages for logged out users when the maintenance mode option is checked.

Solution: If you are locked out of your site, wp-login.php will still function and you can login to disable the maintenance mode plugin.


ManageWP worker

Issue 1: Error when adding a site in the ManageWP dashboard:

Site could not be added - Bad HTTP response (403 Forbidden)

This error sometimes leads users to believe that ManageWP's IP addresses need to be whitelisted on the platform.

Solution: Pantheon does not block any IPs, and there is nothing that would require a whitelist. Most likely there is a security plugin that temporary blocks the connection, or a conflicting plugin like those listed here. Temporary disable all other plugins, or the security plugins, then try adding your site again. For full troubleshooting, consult the ManageWP troubleshooting page.

Issue 2: Cannot remotely update core, or install/update themes and plugins in the Test and Live environments.

Solution: Due to the read only nature of Test and Live environments, remote updates can only be done in Dev, then deployed to Test and Live environment. Consider using a Custom Upstream or WP Site Network instead if you are deploying similar codebase, theme and plugins for a group of sites hosted in Pantheon.

Issue 3: Cannot remotely update core, or install/update theme and plugins in the Dev environment.

Solution: Make sure you are in SFTP mode instead of Git mode.


Monarch Social Sharing

Issue: Seems to break WP-CLI, which is used by many of our workflows (clone, clear cache).


NextGEN Gallery

Issue: NextGEN Gallery assumes write access to the site's codebase within the wp-content/gallery directory, which is not granted on Test and Live environments on Pantheon by design. For additional details, see Using Extensions That Assume Write Access.

Solution: This can be overridden from the plugin's configuration page (/wp-admin/admin.php?page=ngg_other_options) to use wp-content/uploads/gallery/.

An alternative solution is to create a symbolic link.


Query Monitor

Issue: Creates a symlink with an absolute path, which will only work on the appserver where the plugin was installed. The plugin is not fully designed for cloud or multi server environments.

Alternatives: Pantheon has tools in place to monitor database queries: MySQL Slow Log MySQL Troubleshooting with New Relic Pro


Object Sync for Salesforce

Issue: The Object Sync for Salesforce plugin adds dependencies using Composer, and one of these dependencies provides a .gitignore file which prevents files from being picked up by Git. This leads to problematic deployments as not all code moves forward to Test and Live.

Solution: Remove the .gitignore file from the object-sync-for-salesforce/vendor/pippinsplugins/wp-logging directory.


Revive Old Post

Issue: Revive Old Post does not set a proper callback via OAuth and the Twitter module. It attempts to use ["SERVER_NAME"] instead of the recommended ["HTTP_HOST"]. See SERVER_NAME and SERVER_PORT on Pantheon.


SendGrid Subscription Widget

Issue: The email confirmation link sent from the Subscription Widget goes to a redirect loop (see the open issue on wp.org). The link created uses a URL GET parameter __sg_api, which has double underscores. The platform strips this type of parameter to improve caching performance.

Solution: Manually change the the parameter __sg_api to any variable (like sg_api) without double underscores as prefix in the following lines of sendgrid-email-delivery-simplified/lib/class-sendgrid-mc-optin.php:

  • Line 25: $vars[] = '__sg_api';
  • Line 40: if( isset( $wp->query_vars['__sg_api'] ) )
  • Line 146: $confirmation_link = site_url() . '/?__sg_api=1&token=' . $token;

SmartCrawl Pro

Issue: The sitemap URL linked by the plugin produces a 500 Internal Server Error on Test and Live environments. This results in a PHP error: class not found WP_Filesystem_Direct. See more details about the issue.

Solution: The plugin fails to implement a direct FS_METHOD in Test and Live environments. Add the following to wp-config.php, before the line /* That's all, stop editing! Happy Pressing. */:

define('FS_METHOD', 'direct');

Alternative plugins that have an XML sitemap feature that works well on the platform include:


Timthumb

Issue: TimThumb is no longer supported or maintained.


TubePress Pro

Issue: Sites running PHP version 5.3 produce a WSOD after activating this plugin.

Solution: Upgrade your site's PHP version to 5.5, 5.6, or 7.0.


UNLOQ Two Factor Authentication (2FA)

Issue: This widget does not work on this domain error message shown after deploying plugin across environments on Pantheon. This is because the API credentials used on the original environment are being used on a new environment URL, which is not allowed by the plugin. This is by design.

Solution: Manually change unloq_credentials key in thewp_options table. Alternatively, you can re-create an application by resetting your plugin installation (deactivate, delete entries, etc.).

For an alternative 2FA plugin, see Secure Your Site with Two-Factor Authentication.


Unyson Theme Framework

Issue: This plugin has an internal extension system which installs additional files aside from the plugin itself. Some of those extensions have an additional .gitignore file that prevents it from being deployed to Test and Live environment. See this GitHub issue for more information.

Solution: When using these Unyson Extensions, manually delete the .gitignore files in the corresponding locations:

Page builder - wp-content/plugins/framework/extensions/shortcodes/.gitignore - wp-content/plugins/framework/extensions/shortcodes/extensions/page-builder/.gitignore

WordPress Shortcodes - wp-content/plugins/unyson/framework/extensions/shortcodes/.gitignore

Translate Press - wp-content/plugins/unyson/framework/extensions/shortcodes/.gitignore

Events - wp-content/plugins/unyson/framework/extensions/events/.gitignore

Brizy - wp-content/plugins/brizy/vendor/twig/twig/.gitignore


Visual Composer: Website Builder

Issue: This plugin fails to download additional assets during the internal plugin activation procedure on Test and Live environments.

Solution 1: New sites, without existing Test and Live environments: If this plugin is installed and activated on a new site before the Test and Live environments are created, it will properly transfer all assets and database settings to the additional environments.

Solution 2: Sites with existing Test and Live environments: To activate the plugin on sites with existing Test and Live environments, add the following code block to wp-config.php:

if (isset($_ENV['PANTHEON_ENVIRONMENT'])) {
    define('FS_METHOD', 'direct');
}

Weather Station

Issue: This module uses php-intl, which is not currently supported by Pantheon.

WooCommerce

Issue: The "batch upload" process can fail during large uploads. The platform has a 120 second timeout limit for scripts, and large upload processes can hit this limit.

Solution: The suggested workaround is to clone the site locally, import the items, then sync the database back up to the platform.

WooZone

Issue #1: This plugin checks WP_MEMORY_LIMIT, which defaults to 40MB, instead of ini_get('memory_limit'), creating this notice:

WooZone Error

Solution: Add the following line to wp-config.php:

define('WP_MEMORY_LIMIT', '256M');

Issue #2: WooZone writes to a cache folder in wp-content/plugins/woozone/, which is not editable in Test and Live

Solution: Symlink wp-content/plugins/woozone/cache to a folder in wp-content/uploads/. For details, see Using Extensions That Assume Write Access.


Wordfence

Issue #1: Enabling the Live Traffic tracking feature within Wordfence sends cookies which conflict with platform-level page caching.

Solution: Disable Wordfence-generated cookies by disabling Live Traffic within the Wordfence options page. See the WordPress support forum for details.

Issue #2: The Wordfence firewall expects specific write access to wp-content/wflogs during activation. Adding a symlink does not mitigate this, so using the Wordfence firewall is not supported on the platform. This has been reported as an issue within the plugin support forum.

Issue #3: The Wordfence firewall installs a file called .user.ini that includes wordfence-waf.php from the absolute path which uses the application container's ID. These paths will change from time to time due to routine platform maintenance. When a container is migrated and when this plugin is deployed to another environment the absolute path is no longer valid resulting in a WSOD. This has been reported as an issue within the plugin support forum.


WordPress Social Login

Issue #1: This plugin attempts to access PHP native sessions before WordPress has been bootstrapped, which prevents the Pantheon PHP native sessions plugin from being called. This leads to a 500 error when authenticating with external services.

Solution: While not recommended, you can add the following lines to wp-config.php before the first call to session_start:

if (defined( "PANTHEON_BINDING" )) {
  include_once( "/srv/bindings/". PANTHEON_BINDING ."/code/wp-blog-header.php" );
}

Please note: You will need to make this change every timethat the plugin is updated.

Issue #2: This plugin creates a session on every page, which can prevent page level caching.


WPBakery: Page Builder

Issue: The Custom CSS and Design Options pages of the plugin (?page=vc-custom_css, ?page=vc-color) try to create new files when saved. Due to problems related to incorrect FS_METHOD, files are not created or saved in the expected folder, wp-content/uploads/js_composer.

Solution: In wp-config.php, place this block of code:

if (isset($_ENV['PANTHEON_ENVIRONMENT'])) {
    define('FS_METHOD', 'direct');
}

WP All Import / Export

Issue: Large batch processes can fail if they take longer than the platform will allow. See Timeouts on Pantheon for more information.

Solution: To avoid hitting a timeout, you can try:

  • Splitting the import or export into smaller parts
  • Set the plugin to only process 1 or 2 records per iteration

WP Fastest Cache

Issue #1: This plugin requires write access to a cache folder in wp-content/cache, which is not granted on Test and Live environments by design.

Solution: Symlink wp-content/cache to a folder in wp-content/uploads/. For details, see Using Extensions That Assume Write Access

Issue #2: This plugin uses is_dir to verfiy the target directory, which will return false if the directory is a symlink. This causes a permissions error when deleting cache files.


WP Migrate DB

Issue: On Test and Live environments, the Compatibility settings cannot be configured because this feature requires write access to wp-content/mu-plugins. This issue prevents plugins from being included in DB exports and search-and-replace tasks.

Solution: The normal search-and-replace and DB export functions of this plugin work, but will leave all plugins disabled while in operation. If a specific plugin is required to remain active during the DB export and search-and-replace operations, add a filter for it as described in the plugin's debugging page.


WPML - The WordPress Multilingual Plugin

Issue: Locking an environment prevents WPML from operating and returns the following error: It looks like languages per directories will not function.

Solution: Make the environment public within the Site Dashboard. For details, see Security on the Pantheon Dashboard.


Yoast SEO

Issue: The redirects for Yoast SEO setting will detect two options for redirect methods, "PHP", and "Web Server". The Web Server option expects write access to the nginx.conf file, which is not writable on Pantheon.

Solution: Only use the "PHP" redirect method.


WordPress Themes

Jupiter

Issue: This theme presents a form requesting FTP credentials in order to automatically update its components. This will appear on Dev, Test and Live environments and can be hidden with CSS, but is still present.

Solution: The form can be disabled by adding the following to wp-config.php, above the line /* That's all, stop editing! Happy Pressing. */:

/** Changes to disable Jupiter theme FTP form */
define('FS_METHOD', 'direct');
define('FS_CHMOD_DIR', ( 0755 & ~ umask() ) );
define('FS_CHMOD_FILE', ( 0755 & ~ umask() ) );
define('FTP_BASE', __DIR__);
define('FTP_CONTENT_DIR', __DIR__ .'/wp-content/');
define('FTP_PLUGIN_DIR', __DIR__ .'/wp-content/plugins/');

WordPress Functions

add_management_page()

Issue: Adding a submenu page to the Tools main menu using WordPress roles and capabilities that would read or write files to core, themes, or plugins, is not supported.

For example, the install_plugins capability isn't present on the Test or Live environment, therefore menus created with it will not display. For example:

hook = add_management_page( 'My WP Tool Page', 'My WP Tool',
  'install_plugins', 'mywptool', array( $this, 'admin_page' ), '' );

add_action( "load-$hook", array( $this, 'admin_page_load' ) );

This is because write permissions are restricted in Test and Live per the Pantheon Workflow.

Solution: You can use another capability such as read_private_posts instead.

The list of WordPress roles and capabilities that should not be relied upon include:

  • update_core
  • update_plugins
  • update_themes
  • install_plugins
  • install_themes
  • upload_plugins
  • upload_themes
  • delete_themes
  • delete_plugins
  • edit_plugins
  • edit_themes

wp_filesystem->get_contents()

Issue: The function wp_filesystem->get_contents() can fail when an environment is in Git mode (as Test and Live always are) because it is aware of filesystem-level permissions which are restricted in this mode.

Solution: As described in this StackExchange answer, for cases where file ownership doesn't matter this function could be replaced with file_get_contents(). This is true of most cases where the file in question is only being read, not written to.

PHP Libraries

Due to the cloud-based infrastructure of the Pantheon platform, certain PHP libraries are not available on the platform.

MSSQL

The MSSQL PHP library used to interface with Microsoft SQL Server databases is not supported on Pantheon for PHP versions below 7.2. See Upgrade PHP Versions to set your PHP version. Please note that Pantheon does not offer MSSQL databases, this library is only available for those connecting to external databases.

Dynamic Outbound IPs

Due to the cloud-based infrastructure of the Pantheon platform, outbound requests are served by dynamic IP addresses. If your site relies on a static IP address for outgoing requests, the recommended solution is the Pantheon Enterprise Gateway. This is the only way to guarantee compatibility with extensions or services that require a known outgoing IP. Otherwise, you will need to find an alternative to accomplish the request. For more information, see Dynamic Outgoing IP Addresses.

Using the tmp Directory

Issue: Extensions that require the use of the /tmp directory are not supported. With multiple application containers, as exists on Live environments, it's assumed the /tmp directory will be on the same application container. However, as we run a distributed application container matrix, the /tmp directory is not shared.

Solution: For more details, see Temporary File Management.