diff --git a/package-lock.json b/package-lock.json
index 5e97fab859..0407281c25 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4134,9 +4134,9 @@
"license": "GPL-3.0-or-later"
},
"node_modules/@pantheon-systems/pds-toolkit-react": {
- "version": "1.0.0-dev.168",
- "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-toolkit-react/-/pds-toolkit-react-1.0.0-dev.168.tgz",
- "integrity": "sha512-WVkvYbetfl+A8fB8qVx1NtUvszDRgAXDCWTe48NW76ynR+yc/JQX3EiP5C2BR5/yElpwJIt3FXsgRDuYGC7dcQ==",
+ "version": "1.0.0-dev.173",
+ "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-toolkit-react/-/pds-toolkit-react-1.0.0-dev.173.tgz",
+ "integrity": "sha512-5L/rGQflqM3/ml3WQazDvb+8Wg9gJnHdv2k3a88fZuwzIErZCFtx5wa4IujXVRSyh7EeVbaBFPxBwTrpvVd+KQ==",
"dependencies": {
"@floating-ui/react": "^0.24.3",
"@floating-ui/react-dom": "~1.3.0",
@@ -29209,9 +29209,9 @@
"integrity": "sha512-ZgB5H5ZYwNoO+e4kJVBF+s1sTjX9DswTFIAj9TXe3DwqGEv/c2XQMHeyjqaKRS6Cbe6Ts8gIBllIu4clIHxcDQ=="
},
"@pantheon-systems/pds-toolkit-react": {
- "version": "1.0.0-dev.168",
- "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-toolkit-react/-/pds-toolkit-react-1.0.0-dev.168.tgz",
- "integrity": "sha512-WVkvYbetfl+A8fB8qVx1NtUvszDRgAXDCWTe48NW76ynR+yc/JQX3EiP5C2BR5/yElpwJIt3FXsgRDuYGC7dcQ==",
+ "version": "1.0.0-dev.173",
+ "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-toolkit-react/-/pds-toolkit-react-1.0.0-dev.173.tgz",
+ "integrity": "sha512-5L/rGQflqM3/ml3WQazDvb+8Wg9gJnHdv2k3a88fZuwzIErZCFtx5wa4IujXVRSyh7EeVbaBFPxBwTrpvVd+KQ==",
"requires": {
"@floating-ui/react": "^0.24.3",
"@floating-ui/react-dom": "~1.3.0",
diff --git a/source/content/agency-tips.md b/source/content/agency-tips.md
index 910680d6c3..1d9ab8f679 100644
--- a/source/content/agency-tips.md
+++ b/source/content/agency-tips.md
@@ -89,10 +89,7 @@ Use the `pantheon.yml` file to set up platform hooks and advanced site configura
### New Relic APM Pro
-New Relic APM Pro is an advanced tool for application monitoring and troubleshooting, provided to all sites on Pantheon for free. For details, see [New Relic® Performance Monitoring](/guides/new-relic). The following blog posts are also a great reference:
-
-- [New Relic & Drupal: Find Your Site's Slow Spots](https://pantheon.io/blog/new-relic-drupal-find-site-slow-spots)
-- [Troubleshooting WordPress Performance with New Relic® Performance Monitoring](https://pantheon.io/blog/troubleshooting-wordpress-performance-new-relic)
+New Relic APM Pro is an advanced tool for application monitoring and troubleshooting, provided to all sites on Pantheon for free. For details, see [New Relic® Performance Monitoring](/guides/new-relic).
## Cron
Pantheon does not provide a way to set custom scheduling for cron jobs. For details, see [Cron for Drupal](/drupal-cron) and [Cron for WordPress](/guides/wordpress-developer/wordpress-cron).
diff --git a/source/content/composer.md b/source/content/composer.md
deleted file mode 100644
index 38ee094ea0..0000000000
--- a/source/content/composer.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: Composer Fundamentals and WebOps Workflows
-description: Start with Composer basics then explore suggested WebOps workflows for WordPress and Drupal sites on Pantheon.
-tags: [composer, workflow, updates, webops]
-contenttype: [doc]
-innav: [true]
-categories: [update]
-cms: [wordpress, drupal]
-audience: [development]
-product: [--]
-integration: [composer]
-reviewed: "2022-12-12"
----
-
-[Composer](https://getcomposer.org/doc/01-basic-usage.md) is a widely-used PHP dependency and package manager that provides an alternative, more modern way to manage the external (non-core) code used by a WordPress or Drupal site.
-
-At its primary level, Composer needs:
-
-- A list of dependencies
-- A place to put the dependencies
-
-Understanding how Composer can be used independent of Drupal or WordPress is a good place to learn more about the general concepts. For a summary of basic usage, see [Composer's own documentation](https://getcomposer.org/doc/01-basic-usage.md).
-
-## Dependencies
-
-Composer encourages a mental model where code not written specifically for a given project is a dependency. Only files unique to the project are tracked as part of the project's main source repository, also referred to as the canonical site repository. Dependencies for WordPress and Drupal include core, plugins, contrib modules, themes, and libraries. A single dependency, such as a theme, is referred to as a package. Review [Composer `require` and `require dev` Sections](/guides/integrated-composer/dependencies#composer-require-dev-and-require-sections) for more information on how these sections are on used on the Pantheon platform.
-
-Composer looks within [The PHP Package Repository](https://packagist.org/) for dependencies to install, which does not include Drupal or WordPress packages by default. Additional repositories must be configured for Composer to use packages not found in the default repository. Each framework provides its own respective package repository so dependencies can be managed with Composer:
-
-- WordPress:
-- Drupal (Latest Version):
-- Drupal 7:
-
-## Managing Core as a Project Dependency
-
-Sites managed with Composer should use the [nested docroot](/nested-docroot) feature, which allows core to be installed within the `web` subdirectory instead of the default root directory of the site's codebase. A nested docroot is the simplest path towards reliable core updates in a Composer workflow.
-
-This is possible on Pantheon by specifying `web_docroot: true` in `pantheon.yml` file. For details, see [Serving Sites from the Web Subdirectory](/nested-docroot).
-
-
-
-## Pull Request Workflow
-
-In this WebOps workflow, a [Multidev](/guides/multidev) environment is created on Pantheon for each pull request branch on GitHub. Work in these environments can also be committed back to the same branch for review on GitHub. When a pull request is merged into the default branch on GitHub, the result is deployed to the Dev environment on Pantheon:
-
-![Multidev PR workflow](../images/pr-workflow/github-circle-pantheon.png)
-
-### Scaling Considerations
-
-We recommend the Pull Request workflow for single site use cases, and for most use cases involving larger site portfolios such as EDUs. You can create a "template" repository based off Pantheon's example repositories and customize it to your liking, then use the template to create new sites.
-
-However, this method does not support one-click updates in the Site Dashboard. Adopting this WebOps workflow means forgoing all other update techniques in favor of Composer. If your use case requires a simpler update strategy for non-technical site admins, this workflow could present problems scaling, or at the very least require additional training for your development team.
-
-To maintain a Composer-based workflow with one-click updates through the Dashboard, consider using [Integrated Composer](/guides/integrated-composer).
-
-## Custom Upstream Workflow
-
-Use [Integrated Composer](/guides/integrated-composer) to preserve the functionality of Pantheon's one-click updates from the Site Dashboard for Composer-managed sites created from a [Custom Upstream](/guides/custom-upstream).
-
-Updates made using Integrated Composer are only committed at the Custom Upstream level by a single repository maintainer. Updates then trickle down to sites created from the Custom Upstream as one-click updates in the Pantheon Site Dashboard. Custom Upstreams using Integrated Composer with dependencies in `upstream-configuration/composer.json` can have their own site-specific dependencies added in the top-level `composer.json` file. Custom Upstreams using Integrated Composer should avoid changing the top-level `composer.json` file after sites have been created from the Custom Upstream to avoid merge conflicts.
-
-If you are not using Integrated Composer to update your Custom Upstream, all dependencies must be committed.
-
-A shortcoming of the Custom Upstream workflow is that site-specific dependencies are likely to cause a lot of conflicts. This workflow is most practical for a large group of sites that require a single set of dependencies. You should only use this workflow if you don’t intend to use site-specific themes, modules, or plugins downstream.
-
-You can also prevent upstream updates by [setting an empty upstream](/guides/composer-convert/#change-upstreams).
-
-## Next Steps
-
-Here are some ways to get started using Composer for your Pantheon sites:
-
-- Create a new [Drupal with Integrated Composer](/drupal) site.
-- [Migrate or upgrade](/drupal-migration) an existing Drupal site to the latest version of Drupal with Integrated Composer.
-- [Convert a Standard Drupal Site to a Composer Managed Site](/guides/composer-convert).
-- Follow the [Build Tools Guide](/guides/build-tools) to learn best practices for Composer-managed sites with continuous integration (CI) workflows.
-- Create a new [WordPress with Integrated Composer](/guides/integrated-composer) site.
-
-### Partial Adoption
-
-If you're not ready to go all in with a Composer workflow and you want to see how it works on a smaller scale, follow the [Manage Some Dependencies with Composer](/guides/partial-composer) guide to get started.
-
-
-
-## More Resources
-
-- [Convert a Standard Drupal Site to a Composer-Managed Site](/guides/composer-convert)
-
-- [WordPress with Composer on Pantheon](/guides/wordpress-composer)
\ No newline at end of file
diff --git a/source/content/drupal.md b/source/content/drupal.md
deleted file mode 100644
index b9cc9ef389..0000000000
--- a/source/content/drupal.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: "Drupal on Pantheon"
-description: Get started with Drupal on the Pantheon WebOps Platform.
-tags: [site, D8, D9, D10]
-contributors: [populist, edwardangert, whitneymeredith]
-reviewed: "2022-12-09"
-contenttype: [doc]
-innav: [true]
-categories: [cms]
-cms: [drupal]
-audience: [development]
-product: [integrated-composer]
-integration: [--]
----
-
-Drupal 10 is available to all new sites, and is available as an [upgrade path for Drupal 9 sites](/drupal-10#update-a-drupal-9-site-to-drupal-10). Refer to [Drupal 10 on Pantheon](/drupal-10) for more information.
-
-Drupal 9 is similarly available on Pantheon to all new sites, and as an [upgrade path for Drupal 8+ sites](/drupal-migration).
-
-Since Drupal itself is in active development and each new version brings a number of significant changes from previous versions, this doc outlines the biggest changes and answers frequently asked questions.
-
-## About Drupal
-
-Drupal includes many of the features and layout that Drupal users are familiar with, and it removes deprecated code to help improve future Drupal development.
-
-The latest version of Drupal updates Drupal’s underlying dependencies like [Symfony](https://symfony.com/) and [Twig](https://twig.symfony.com/), removes several deprecated API functions in favor of better options, and allows everyone running Drupal 8.8+ an easy upgrade path to Drupal and beyond.
-
-## Drupal With Integrated Composer
-
-On the Pantheon Platform, Drupal sites use [Integrated Composer](/guides/integrated-composer), letting you deploy your site on Pantheon with one-click updates for both upstream commits and Composer dependencies, while still receiving upstream updates.
-
-### Site Structure
-
-
-
-### Managing Dependencies with Composer
-
-Learn more about working with upstream and site dependencies in the [Integrated Composer](/guides/integrated-composer) documentation.
-
-## Before You Begin
-
-- Log in to your Pantheon account. If you don't have one, [create one first](https://pantheon.io/register?docs) and familiarize yourself with [Workspaces](/guides/account-mgmt/workspace-sites-teams/workspaces) before you create a new site.
-
-- Set up [SSH Keys](/ssh-keys) on your local computer and Pantheon account.
-
-- Install and configure [Git](/guides/git/git-config) and [Composer](https://getcomposer.org/download/) on your local computer.
-
-- Mac users can use [Homebrew](https://brew.sh/) to install both Git, Composer, and Terminus along with their required dependencies:
-
- ```bash{promptUser:user}
- brew install git composer pantheon-systems/external/terminus
- ```
-
-## Create a New Drupal Site with Integrated Composer
-
-[Create a new Drupal site from the Dashboard](/add-site-dashboard) as you would with any new site. Integrated Composer is built in and ready to use.
-
-## Upgrade or Migrate to Drupal
-
-To upgrade or migrate an existing Drupal site to Drupal with Integrated Composer, see the [Drupal Migration Guide](/drupal-migration).
-
-To check an existing site's compatibility to upgrade, visit the appropriate [Drupal Migration Guide](/drupal-migration).
-
-## Troubleshooting and Support
-
-See the appropriate [Drupal Migration Guide](/drupal-migration) for help troubleshooting common issues with Drupal with Integrated Composer.
-
-### Where can I report an issue?
-
-[Contact support](/guides/support) to report any issues that you encounter.
-
-### Can I Use Lando or Localdev for Drupal?
-
-Some users have reported success using [Lando](https://docs.lando.dev/basics/) with Drupal, but it relies on a workaround and requires extra configuration. Check the status of the [Lando repo's issue](https://github.com/lando/lando/issues/2831#issuecomment-771833900) before you continue.
-
-Manually update the [landofile](https://docs.lando.dev/config/lando.html#base-file) in the project folder, and set `drupal9` as the framework:
-
- ```yml:title=lando.yml
- # Lando issue 2831 workaround for D9
- framework: drupal9
- ```
-
-When you create a project with Lando from the Pantheon recipe, the `framework` will default to `drupal8` for a Drupal site.
-
-If you created new project with Lando, change the value for `framework` to `drupal8`, then run `lando rebuild`.
-
-### Site-local Drush Is Required for Drupal Sites
-
-Do not remove `drush/drush` from `composer.json`. If it's removed, `terminus drush` commands will fail with errors related to Twig.
diff --git a/source/content/guides/build-tools/02-create-project.md b/source/content/guides/build-tools/02-create-project.md
index 5e89216337..f067f9a007 100644
--- a/source/content/guides/build-tools/02-create-project.md
+++ b/source/content/guides/build-tools/02-create-project.md
@@ -2,11 +2,11 @@
title: Build Tools
subtitle: Create a New Project
description: In step two of the Build Tools guide, learn how to create a new Build Tools project.
-tags: [composer, terminus, webops, workflow, D8, D9, D10]
+tags: [composer, terminus, webops, workflow, D8, D9, wordpress]
type: guide
permalink: docs/guides/build-tools/create-project/
editpath: build-tools/02-create-project.md
-reviewed: "2021-12-13"
+reviewed: "2024-10-15"
contenttype: [guide]
innav: [false]
categories: [dependencies]
@@ -16,7 +16,7 @@ product: [--]
integration: [--]
---
-In this section, we will use the Terminus Build Tools Plugin to create a new project consisting of a Git repository, a Continuous Integration service, and a Pantheon site.
+In this section, we will use the Terminus Build Tools Plugin to create a new project consisting of a Git repository, [Composer](https://getcomposer.org), a Continuous Integration (CI) service, and a Pantheon site with Automated Testing. This guide will get you started, but you will need to customize and maintain the CI/testing set up for your projects.
@@ -26,35 +26,14 @@ Substitute your chosen Git Provider and CI service in these instructions with th
-## Prerequisites
+## Requirements
-Ensure you have the latest versions of Terminus and the Terminus Build Tools plugin installed. You may want to run `terminus self:plugin:update pantheon-systems/terminus-build-tools-plugin` to ensure you have the most recent version.
-
-1. Install [Composer](/guides/composer).
- - Verify your installation with `composer --version`:
-
- ```bash{outputLines: 2}
- composer --version
- Composer version 2.1.8 2021-09-15 13:55:14
- ```
-
-1. Install the most recent release of [Terminus](/terminus/).
- - Verify your installation with `terminus --version`:
-
- ```bash{outputLines: 2}
- terminus --version
- Terminus 3.0.1
- ```
-
-1. [Add an SSH key](/ssh-keys) in your Personal Workspace.
-
-1. [Generate a Pantheon machine token](https://dashboard.pantheon.io/machine-token/create), then authenticate Terminus.
-
-1. Install the [Terminus Build Tools Plugin](https://github.com/pantheon-systems/terminus-build-tools-plugin):
-
- ```bash{promptUser: user}
- terminus self:plugin:install terminus-build-tools-plugin
- ```
+* [Composer](/guides/integrated-composer)
+* [Terminus](/terminus/)
+* [Terminus Build Tools Plugin](https://github.com/pantheon-systems/terminus-build-tools-plugin)
+* [PHP version](https://docs.pantheon.io/guides/php/php-versions#verify-current-php-versions) 7.2 or greater
+* [An SSH key](/ssh-keys) in your Personal Workspace.
+* [A Pantheon machine token](https://dashboard.pantheon.io/machine-token/create), to authenticate Terminus.
### Access Tokens (Optional)
@@ -119,16 +98,172 @@ Modify the commands in the following examples to match your project's needs.
terminus build:project:create --git=github --team='My Agency Name' wp my-site
```
+
+
+Pantheon has a [WordPress (Composer Managed)](/guides/wordpress-composer/wordpress-composer-managed) upstream. You can use this upstream to create a Composer-managed WordPress site with **Bedrock**. **Terminus Build Tools** does not currently support the Bedrock-based WordPress (Composer Managed) upstream.
+
+
+
- Start a GitHub project with Drupal:
```bash{promptUser: user}
terminus build:project:create --git=github --team='My Agency Name' d9 my-site
```
+
+
+
+Support has not yet been added for Drupal versions past 9, however you can still update to the latest Drupal version after creating the project.
+
+
The script will ask for additional information such as tokens/credentials for GitHub and the associated CI.
For a list of all available command options, see the [Build Tools Project README](https://github.com/pantheon-systems/terminus-build-tools-plugin/blob/3.x/README.md#buildprojectcreate)
+## Review Important Directories and Update File Paths
+
+### `/web` Directory
+
+Your site is stored and served from the `/web` subdirectory located next to the `pantheon.yml` file. You must store your website in this subdirectory for a Composer-based workflow. Placing your website in the subdirectory also allows you to store tests, scripts, and other files related to your project in your repo without affecting your web document root. It also provides additional security by preventing web access to files outside of the document root through Pantheon.
+Your files may still be accessible from your version control project if it is public. See the [`pantheon.yml` documentation](/pantheon-yml#nested-docroot) for details.
+
+1. Verify that your website is stored in the `/web` subdirectory.
+
+### `composer.json` File
+
+This project uses Composer to manage third-party PHP dependencies. Some files, such as core CMS packages inside the `/web` directory, may not be visible in the repository. This is because the CMS (Drupal or WordPress) and its plugins/modules are installed via Composer and ignored in the `.gitignore` file.
+
+Third-party dependencies, such as modules, plugins and themes, are added to the project via `composer.json` file. The `composer.lock` file keeps track of the exact dependency version. For WordPress, Composer installer-paths are used to ensure the dependencies are downloaded into the appropriate directory.
+
+1. Place all dependencies in the **require** section of your `composer.json` file.
+
+ - This includes dependencies that are only used in non-Live environments. All dependencies in the **require** section are pushed to Pantheon.
+
+1. Place all dependencies that are not a part of the web application but are necessary to build or test the project in the **require-dev** section.
+
+ - Example dependencies are `php_codesniffer` and `phpunit`. Dev dependencies are deployed to Dev and Multidev environments, but not to Test and Live environments.
+
+## Continuous Integration
+
+The scripts that run on Continuous Integration are stored in the `.ci` directory. Provider-specific configuration files, such as `.circle/config.yml` and `.gitlab-ci.yml` use these scripts.
+
+The scripts are organized into subdirectories according to their function:
+
+- Build
+- Deploy
+- Test
+
+### Build Scripts .ci/build
+
+- `.ci/build` script builds an artifact suitable for deployment.
+
+- `.ci/build/php` installs PHP dependencies with Composer.
+
+### Build Scripts `.ci/deploy`
+
+All scripts stored in the `.ci/deploy` directory facilitate code deployment to Pantheon.
+
+ - `.ci/deploy/pantheon/create-multidev` creates a new [Pantheon Multidev environment](/guides/multidev) for branches other than the default Git branch. Note that not all users have Multidev access. Please consult the [Multidev FAQ doc](/guides/multidev/multidev-faq) for details.
+
+- `.ci/deploy/pantheon/dev-multidev` deploys the built artifact to either the Pantheon Dev or a Multidev environment, depending on the Git branch.
+
+## Automated Test Scripts `.ci/tests`
+
+The `.ci/tests` scripts run automated tests. You can add or remove scripts depending on your testing needs.
+
+### Static Testing
+
+- `.ci/test/static` and `tests/unit` are static tests that analyze code without executing it. These tests are good at detecting syntax errors but not functionality errors.
+
+- `.ci/test/static/run` runs [PHP CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) with [WordPress coding standards](https://github.com/WordPress/WordPress-Coding-Standards) (for WordPress sites), [PHP Unit](https://phpunit.de/), and [PHP syntax checking](https://phpcodechecker.com/).
+
+- `tests/unit/bootstrap.php` bootstraps the Composer autoloader.
+
+- `tests/unit/TestAssert.php` provides an example Unit test.
+
+1. Create all project-specific test files in the `tests/unit` directory.
+
+### Visual Regression Testing
+
+The scripts stored in the `.ci/test/visual-regression` directory run visual regression testing through a headless browser to take screenshots of web pages and compare them for visual differences.
+
+- `.ci/test/visual-regression/run` runs [BackstopJS](https://github.com/garris/BackstopJS) visual regression testing.
+
+- `.ci/test/visual-regression/backstopConfig.js` is the [BackstopJS](https://github.com/garris/BackstopJS) configuration file.
+
+1. Update the settings in `.ci/test/visual-regression/backstopConfig.js` file for your project.
+
+ - For example, the `pathsToTest` variable determines the URLs to test.
+
+## GitHub Actions
+
+This section provides information enabling GitHub Actions for your site.
+
+The Build Tools Site will configure GitHub Actions automatically if it was passed as the selected CI when creating the site. You will need to consult advanced external resources if you're working with an existing non-Build Tools site and want to add Github Actions.
+
+The steps to enable GitHub Actions for an existing Build Tools site created with another CI (for example, CircleCI) shown below might work for you.
+
+1. Copy `.ci/.github` to `.github`.
+
+1. Add the following secrets to the Github Actions configuration:
+
+ - `ADMIN_EMAIL`
+
+ - `ADMIN_PASSWORD`
+
+ - `ADMIN_USERNAME`
+
+ - `TERMINUS_TOKEN`
+
+ - `TERMINUS_SITE`
+
+ - `SSH_PRIVATE_KEY`
+
+ - `GH_TOKEN`
+
+
+## Working Locally with Lando
+
+Complete the one-time steps below to get started using [Lando](https://docs.devwithlando.io/) for local development. Please note than Lando is an independent product and is not supported by Pantheon. Refer to the [Lando documentation](https://docs.devwithlando.io/) for more information.
+
+1. [Install Lando](https://docs.lando.dev/getting-started/installation.html) if it is not already installed.
+
+1. Clone your project repository from GitHub to your local.
+
+1. Manually create a `.lando.yml` file with your preferred configuration, based on the WordPress recipe.
+
+1. Run `lando start` to start Lando.
+
+1. Save the local site URL.
+
+ - The local site URL should look similar to: `https://.lndo.site.`
+
+1. Run the command below to download dependencies.
+
+ ```bash
+ `lando composer install --no-ansi --no-interaction --optimize-autoloader --no-progress`
+ ```
+
+1. Run the command below to download the media files and database from Pantheon.
+
+ ```bash
+ `lando pull --code=none`
+ ```
+
+1. Visit the local site URL saved in the preceding steps.
+
+ - You should now be able to edit your site locally. The steps above do not need to be completed on subsequent starts. You can stop Lando with `lando stop` and start it again with `lando start`.
+
+1. Run all Composer, Terminus and wp-cli commands in Lando instead of the host machine.
+
+ - This is done by prefixing the desired command with `lando`. For example, after a change to `composer.json` run `lando composer update` rather than `composer update`.
+
+
+
+Do NOT push/pull code between Lando and Pantheon directly. All code should be pushed to GitHub and deployed to Pantheon through a continuous integration service, such as CircleCI.
+
+
+
### Troubleshooting
diff --git a/source/content/guides/custom-upstream/02-create-custom-upstream.md b/source/content/guides/custom-upstream/02-create-custom-upstream.md
index aef72c887f..b4f19f829c 100644
--- a/source/content/guides/custom-upstream/02-create-custom-upstream.md
+++ b/source/content/guides/custom-upstream/02-create-custom-upstream.md
@@ -175,11 +175,18 @@ You must track Pantheon's corresponding upstream repository within the Custom Up
```
+
+
+
+ ```bash{promptUser: user}
+ git remote add pantheon-wordpress https://github.com/pantheon-upstreams/wordpress-composer-managed.git
+ ```
+
```bash{promptUser: user}
- git remote add pantheon-drupal https://github.com/pantheon-upstreams/drupal-10-composer-managed.git
+ git remote add pantheon-drupal https://github.com/pantheon-upstreams/drupal-11-composer-managed.git
```
@@ -219,6 +226,17 @@ You must track Pantheon's corresponding upstream repository within the Custom Up
+
+
+ ```bash{promptUser: user}
+ git checkout -b master
+ git fetch pantheon-wordpress main
+ git merge pantheon-wordpress/main
+ git push origin master
+ ```
+
+
+
1. Pull and commit the core files:
diff --git a/source/content/guides/drush/09-troubleshoot-drush.md b/source/content/guides/drush/09-troubleshoot-drush.md
index 10e4ebf8f7..6c93359060 100644
--- a/source/content/guides/drush/09-troubleshoot-drush.md
+++ b/source/content/guides/drush/09-troubleshoot-drush.md
@@ -233,6 +233,13 @@ This error can occur on Multidevs with a [site-local installation](/guides/drush
You can add a compatible Drush version in your `pantheon.yml` file to refresh the environment as a potential workaround. For Drupal 9 and later, add `drush_version: 10` to the `pantheon.yml` file.
+### Drush GDPR Dumper Error
+[Drush GDPR Dumper](https://github.com/druidfi/drush-gdpr-dumper) is incompatible with MariaDB and breaks the `drush-sql-dump` command, resulting in following error: `The '--column-statistics' option does not exist.`
+
+This package ships it's own `mysqldump` file to do the MySQL dump and overrides the `extra-dump` configuration, which is passed to `mysqldump` and does not allow it's alteration.
+
+To fix this error, remove the `mysqldump` file or uninstall the package. Then the platform's version of `mysqldump` will be used instead.
+
## More Resources
- [Timeouts](/timeouts)
diff --git a/source/content/guides/integrated-composer/01-introduction.md b/source/content/guides/integrated-composer/01-introduction.md
index 7712495336..7abfd22429 100644
--- a/source/content/guides/integrated-composer/01-introduction.md
+++ b/source/content/guides/integrated-composer/01-introduction.md
@@ -3,8 +3,8 @@ title: Integrated Composer
subtitle: Introduction
description: Learn how to use Integrated Composer.
tags: [composer, workflow]
-contributors: [ari, edwardangert]
-reviewed: "2022-12-13"
+contributors: [ari, edwardangert, jazzsequence]
+reviewed: "2024-10-15"
showtoc: true
permalink: docs/guides/integrated-composer
contenttype: [guide]
@@ -16,13 +16,22 @@ product: [composer]
integration: [--]
---
-Integrated Composer is a Pantheon platform feature that extends Composer functionality to WordPress and Drupal's core files, and treats them as a managed dependency. Integrated Composer enables one-click updates from the Dashboard for upstream updates and Composer dependencies on your Composer-managed Pantheon site.
+[Composer](https://getcomposer.org/) is a widely-used dependency and package manager for PHP. Composer provides an easy way to manage packages used by a WordPress site. Packages can be WordPress plugins, Drupal modules, themes, other PHP libraries and even the core CMS itself.
+
+At the most basic level, Composer requires:
+
+- A list of dependencies
+- A place to put the dependencies
+
+Understanding how Composer can be used independent of Drupal or WordPress is a good place to learn more about the general concepts. For a summary of basic usage, see [Composer's own documentation](https://getcomposer.org/doc/01-basic-usage.md).
+
+**Integrated Composer** is a Pantheon platform feature that extends Composer functionality to WordPress and Drupal's core files, and treats them as a managed dependency. Integrated Composer enables one-click updates from the Dashboard for upstream updates and Composer dependencies on your Composer-managed Pantheon site.
## Get Started With Integrated Composer
### Drupal with Integrated Composer
-- Follow the [Drupal on Pantheon](/drupal) doc to create a new Drupal site with Integrated Composer built in.
+- Follow the steps to [Create a new Composer-managed CMS site](/guides/integrated-composer/create) to add a new Drupal site with Integrated Composer built in.
- To upgrade or migrate an existing site to Drupal with Integrated Composer, visit the [Migrate to Drupal](/drupal-migration) guide.
@@ -31,7 +40,7 @@ Integrated Composer is a Pantheon platform feature that extends Composer
-`drupal-composer-managed` is the recommended Composer-based Drupal upstream. The Composer-based Drupal upstreams below have been deprecated.
+[`drupal-composer-managed`](https://github.com/pantheon-upstreams/drupal-composer-managed) is the recommended Composer-based Drupal upstream. The following Composer-based Drupal upstreams have been deprecated:
- `drupal-project`
- `drupal-recommended`
@@ -41,27 +50,31 @@ You can use the [Terminus Conversion Tools Plugin](https://github.com/pantheon-s
### WordPress with Integrated Composer
+- Follow the steps to [Create a new Composer-managed CMS site](/guides/integrated-composer/create) to add a new WordPress site with Integrated Composer built in.
+
+- To upgrade or migrate an existing Composer-managed WordPress site to Pantheon with Integrated Composer, please reach out to our [Professional Services](https://pantheon.io/professional-services) team for information on site migration services.
-Pantheon has a [WordPress (Composer Managed)](/guides/wordpress-composer/wordpress-composer-managed) upstream. You can use this upstream to create an Integrated Composer WordPress site with **Bedrock**.
+[`wordpress-composer-managed`](https://github.com/pantheon-systems/wordpress-composer-managed) is the recommended Composer-based WordPress upstream. The following Composer-based WordPress upstreams have been deprecated:
-
+- `wordpress-composer`
+- `example-wordpress-composer`
+- `wordpress-project`
-1. [Fork the Pantheon-maintained repository](/guides/custom-upstream/create-custom-upstream#create-and-host-the-repository-remotely) from [https://github.com/pantheon-upstreams/wordpress-project](https://github.com/pantheon-upstreams/wordpress-project).
+
-1. [Add a new Custom Upstream](/guides/custom-upstream/create-custom-upstream#connect-repository-to-pantheon) on the Pantheon Dashboard.
+## Dependencies
-1. Create a new WordPress site from the Upstream. Do not customize the upstream as yet.
+Composer encourages a mental model where code not written specifically for a given project is a dependency. Only files unique to the project are tracked as part of the project's main source repository, also referred to as the canonical site repository. Dependencies for WordPress and Drupal include core, plugins, contrib modules, themes, and libraries. A single dependency, such as a theme, is referred to as a package. Review [Composer `require` and `require dev` Sections](/guides/integrated-composer/dependencies#composer-require-and-require-dev-sections) for more information on how these sections are on used on the Pantheon platform.
-1. Navigate to the Dev environment, then click **Visit Development Site** and follow the prompts to complete the CMS installation.
+Composer looks within [The PHP Package Repository](https://packagist.org/) for dependencies to install, which does not include Drupal or WordPress packages by default. Additional repositories must be configured for Composer to use packages not found in the default repository. Each framework provides its own respective package repository so dependencies can be managed with Composer:
-1. [Clone the site locally](/guides/local-development/configuration) and run `composer install`.
+- WordPress:
+- Drupal: `https://packages.drupal.org/8`
-
+## Managing Core as a Project Dependency
-## More Resources
+Integrated Composer sites use the [nested docroot](/nested-docroot) feature, which allows core to be installed within the `web` subdirectory instead of the default root directory of the site's codebase. A nested docroot is the simplest path towards reliable core updates in a Composer workflow. This is done on Pantheon by specifying `web_docroot: true` in the Pantheon configuration file.
-- [WordPress on Pantheon Quick Start Guide](/guides/wordpress-pantheon/)
-- [Supported Drupal Versions](/supported-drupal)
-- [Drupal](/drupal)
+When using a Pantheon-maintained upstream for an Integrated Composer site(either [Drupal](https://github.com/pantheon-upstreams/drupal-composer-managed) or [WordPress](https://github.com/pantheon-systems/wordpress-composer-managed)), the nested docroot setting is already configured in the `pantheon.upstream.yml` file.
\ No newline at end of file
diff --git a/source/content/guides/integrated-composer/02-create.md b/source/content/guides/integrated-composer/02-create.md
new file mode 100644
index 0000000000..b783cdbc97
--- /dev/null
+++ b/source/content/guides/integrated-composer/02-create.md
@@ -0,0 +1,104 @@
+---
+title: Integrated Composer
+subtitle: Create a new Composer-managed CMS site
+description: Learn how to create new integrated composer Drupal and WordPress sites on Pantheon.
+contenttype: [guide]
+innav: [false]
+categories: [dependencies]
+cms: [wordpress]
+audience: [development]
+product: [composer]
+integration: [--]
+tags: [wordpress]
+contributors: [whitneymeredith, jspellman814, jazzsequence]
+layout: guide
+showtoc: true
+permalink: docs/guides/integrated-composer/create
+anchorid: wordpress-composer-managed
+reviewed: "2024-10-15"
+---
+
+## Drupal with Integrated Composer
+This section provides information on how to use Drupal with Integrated Composer.
+
+### Create Your Site
+
+There are two ways you can spin up a site using WordPress Composer Managed:
+
+- Running the following terminus command:
+
+ ```bash{promptUser: user}
+ terminus site:create --org ORG --region REGION --
-
+
### Parameterize the Script
You can run the script with parameters for reusability.
diff --git a/source/content/guides/multisite/03-config.md b/source/content/guides/multisite/03-config.md
index 5c9b132ea4..1982aff3ca 100644
--- a/source/content/guides/multisite/03-config.md
+++ b/source/content/guides/multisite/03-config.md
@@ -132,6 +132,43 @@ Complete the steps below after spinning up a new WPMS site from the correct Cust
/* That's all, stop editing! Happy Pressing. */
```
+## Setting up Multisite on WordPress (Composer Managed) sites
+
+The [Bedrock](https://roots.io/bedrock/)-based [WordPress (Composer Managed)](https://github.com/pantheon-systems/wordpress-composer-managed) upstream uses `Config::define()` and `config/application.php` instead of traditional `define()` statements in `wp-config.php`. You will not be able to use WP-CLI via Terminus to enable multisite as documented above in a standard multisite configuration. This section provides guidance on how to set up a WordPress Multisite using the WordPress (Composer Managed) upstream.
+
+1. Set the site's connection mode to Git:
+
+ ```bash{promptUser: user}
+ terminus connection:set .dev git
+ ```
+2. Open the `config/application.php` file in your site's codebase and add the following line anywhere _above_ the `Config::apply();` line:
+
+ ```php
+ Config::define( 'WP_ALLOW_MULTISITE', true );
+ ```
+3. Visit your development site's WordPress admin and navigate to **Tools** > **Network Setup**.
+ ![Network Setup page](../../../images/wordpress-composer/04-multisite-network-setup.png)
+4. Choose **Sub-domains** or **Sub-directories** (depending on your needs), fill in the Network Title and Admin Email, and click **Install**.
+5. You will be given instructions to update your `config/application.php` file. Below where you added the `WP_ALLOW_MULTISITE` line, copy and paste the code provided. The `SUBDOMAIN_INSTALL` value will be `true` or `false` depending on the option you chose in the previous step. For example, if you chose subdirectories, your `config/application.php` file should look like this:
+
+ ```php
+ Config::define( 'MULTISITE', true );
+ Config::define( 'SUBDOMAIN_INSTALL', false );
+ // Use PANTHEON_HOSTNAME if in a Pantheon environment, otherwise use HTTP_HOST.
+ Config::define( 'DOMAIN_CURRENT_SITE', defined( 'PANTHEON_HOSTNAME' ) ? PANTHEON_HOSTNAME : $_SERVER['HTTP_HOST'] );
+ Config::define( 'PATH_CURRENT_SITE', '/' );
+ Config::define( 'SITE_ID_CURRENT_SITE', 1 );
+ Config::define( 'BLOG_ID_CURRENT_SITE', 1 );
+ ```
+6. Save your changes and commit them to your Git repository. WordPress will prompt you to log back in after you push the changes.
+7. Log into your site. When you log back into your WordPress admin dashboard, you will see a new **My Sites** menu item in the top left corner. This is where you can manage your network of sites. You now have a WordPress subdirectory multisite network set up on a WordPress (Composer Managed)-based upstream.
+ ![My Sites](../../../images/wordpress-composer/04-multisite-my-sites.png)
+
+
+
+Currently, the built-in dashboard [WordPress Multisite Search and Replace](/guides/multisite/search-replace/) does not support Composer-based WordPress multisites. To perform a search and replace on a WordPress (Composer Managed) multisite, you will need to use WP-CLI via Terminus manually. For more information, see our [WordPress Multisite Search and Replace](guides/multisite/workflows/#run-wp-cli-search-replace-manually) guide.
+
+
## Develop the Multisite
Congratulations on setting up your first WordPress Multisite. When you log in to the WordPress Dashboard, you'll see a **My Sites** menu item in the toolbar:
@@ -178,8 +215,8 @@ define( 'DOMAIN_CURRENT_SITE', PANTHEON_HOSTNAME );
## More Resources
-- [Environment-Specific Configuration for WordPress Sites](/guides/environment-configuration/environment-specific-config)
-
-- [WordPress Pantheon Cache Plugin Configuration](/guides/wordpress-configurations/wordpress-cache-plugin)
-
-- [WordPress with Composer on Pantheon](/guides/wordpress-composer)
+* [Environment-Specific Configuration for WordPress Sites](/guides/environment-configuration/environment-specific-config)
+* [WordPress Pantheon Cache Plugin Configuration](/guides/wordpress-configurations/wordpress-cache-plugin)
+* [WordPress with Composer on Pantheon](/guides/wordpress-composer)
+* [WordPress Multisite documentation](https://developer.wordpress.org/advanced-administration/multisite/)
+* [WordPress Multisite Domain Mapping](https://developer.wordpress.org/advanced-administration/multisite/domain-mapping/)
diff --git a/source/content/guides/new-relic/01-introduction.md b/source/content/guides/new-relic/01-introduction.md
index 7a7b8c583a..637be19062 100644
--- a/source/content/guides/new-relic/01-introduction.md
+++ b/source/content/guides/new-relic/01-introduction.md
@@ -31,7 +31,3 @@ All plans except for a Basic plan can use New Relic®. New Relic® is avai
## More Resources
- [Incident Management with New Relic® and PagerDuty](/guides/pagerduty/)
-
-- [New Relic® Performance Monitoring and Drupal: Find Your Site's Slow Spots](https://pantheon.io/blog/new-relic-drupal-find-site-slow-spots)
-
-- [Troubleshooting WordPress Performance with New Relic®](https://pantheon.io/blog/troubleshooting-wordpress-performance-new-relic)
diff --git a/source/content/guides/new-relic/03-monitor-new-relic.md b/source/content/guides/new-relic/03-monitor-new-relic.md
index 1fa5d4ec69..8579fecd9e 100644
--- a/source/content/guides/new-relic/03-monitor-new-relic.md
+++ b/source/content/guides/new-relic/03-monitor-new-relic.md
@@ -37,14 +37,8 @@ Depending on which area you need to optimize, you will explore different areas o
For more information on using New Relic®'s features, we encourage you to review the [New Relic® APM](https://docs.newrelic.com/docs/apm) docs, especially the pages on [transactions](https://docs.newrelic.com/docs/apm/transactions) and [slow query details](https://docs.newrelic.com/docs/apm/applications-menu/monitoring/viewing-slow-query-details). You can find more information on using New Relic® to investigate specific areas of performance below:
-- [Measuring PHP7 Performance with New Relic®](https://pantheon.io/blog/measuring-php-7-performance-new-relic-nobsbenchmarks)
-
- [MySQL Troubleshooting With New Relic® Performance Monitoring](/guides/new-relic/debug-mysql-new-relic)
-- [New Relic® Performance Monitoring and Drupal: Find Your Site's Slow Spots](https://pantheon.io/blog/new-relic-drupal-find-site-slow-spots)
-
-- [Troubleshooting WordPress Performance with New Relic® Performance Monitoring](https://pantheon.io/blog/troubleshooting-wordpress-performance-new-relic)
-
## Configure Ping Monitors (Synthetics) for Availability
New Relic provides an availability monitoring service within their Synthetics tool suite which can be enabled by [contacting support](/guides/support/contact-support/). This basic monitoring feature sends a request to designated URLs from configured locations. Requests are sent at configured intervals and alerts are sent via email when a response fails.
diff --git a/source/content/guides/new-relic/06-troubleshoot-new-relic.md b/source/content/guides/new-relic/06-troubleshoot-new-relic.md
index 66a92d4abc..c2e088bfac 100644
--- a/source/content/guides/new-relic/06-troubleshoot-new-relic.md
+++ b/source/content/guides/new-relic/06-troubleshoot-new-relic.md
@@ -111,6 +111,4 @@ Availability monitoring from APM is heavily outdated, and will not work with the
## More Resources
- [MySQL Troubleshooting with New Relic Performance Monitoring](/guides/new-relic/debug-mysql-new-relic)
-- [Troubleshooting WordPress Performance with New Relic](https://pantheon.io/blog/troubleshooting-wordpress-performance-new-relic)
-- [New Relic Performance Monitoring and Drupal: Find Your Site's Slow Spots](https://pantheon.io/blog/new-relic-drupal-find-site-slow-spots)
- [New Relic FAQ](/guides/new-relic/new-relic-faq)
diff --git a/source/content/guides/pagerduty/02-monitor.md b/source/content/guides/pagerduty/02-monitor.md
index d945ba5089..9f71ed5b0b 100644
--- a/source/content/guides/pagerduty/02-monitor.md
+++ b/source/content/guides/pagerduty/02-monitor.md
@@ -79,8 +79,4 @@ Now that you have a monitor setup in New Relic® to periodically check your P
- [MySQL Troubleshooting with New Relic® Performance Monitoring](/guides/new-relic/debug-mysql-new-relic)
-- [New Relic® Performance Monitoring and Drupal: Find Your Site's Slow Spots](https://pantheon.io/blog/new-relic-drupal-find-site-slow-spots)
-
-- [Troubleshooting WordPress Performance with New Relic®](https://pantheon.io/blog/troubleshooting-wordpress-performance-new-relic)
-
- [New Relic® FAQ](/guides/new-relic/new-relic-faq)
diff --git a/source/content/guides/pagerduty/04-notify.md b/source/content/guides/pagerduty/04-notify.md
index 2de03231a5..4a64fcfbfb 100644
--- a/source/content/guides/pagerduty/04-notify.md
+++ b/source/content/guides/pagerduty/04-notify.md
@@ -53,8 +53,4 @@ Now we'll hookup our PagerDuty service as a notification channel for our alert p
## More Resources
-- [Monitor and Improve Site Performance with New Relic®](/guides/new-relic/monitor-new-relic)
-
-- [New Relic® Performance Monitoring and Drupal: Find Your Site's Slow Spots](https://pantheon.io/blog/new-relic-drupal-find-site-slow-spots)
-
-- [Troubleshooting WordPress Performance with New Relic®](https://pantheon.io/blog/troubleshooting-wordpress-performance-new-relic)
+- [Monitor and Improve Site Performance with New Relic®](/guides/new-relic/monitor-new-relic)
\ No newline at end of file
diff --git a/source/content/guides/wordpress-composer/01-introduction.md b/source/content/guides/wordpress-composer/01-introduction.md
deleted file mode 100644
index 41467a67b2..0000000000
--- a/source/content/guides/wordpress-composer/01-introduction.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: WordPress with Composer on Pantheon
-subtitle: Introduction
-description: Learn more about using WordPress with Composer on Pantheon.
-contenttype: [guide]
-innav: [true]
-categories: [dependencies]
-cms: [wordpress]
-audience: [development]
-product: [--]
-integration: [--]
-tags: [wordpress]
-contributors: [whitneymeredith,jazzsequence]
-showtoc: true
-permalink: docs/guides/wordpress-composer
----
-
-[Composer](https://getcomposer.org/) is a widely-used dependency and package manager for PHP. Composer provides an easy way to manage packages used by a WordPress site. Packages can be plugins, themes, other PHP libraries and even WordPress core itself.
-
-At the most basic level, Composer requires:
-
-- A list of dependencies
-- A place to put the dependencies
-
-There are different cases for using Composer to manage dependencies on a WordPress site, including:
-
-- Manage dependencies for themes and plugins you’re currently developing
-- Manage the themes and plugins currently used on the site
-- Manage WordPress core updates
-- Total site dependency management, including custom code
-
-## First Steps
-
-Review the steps below before using this guide to create or manage updates on your Pantheon Composer-managed WordPress site.
-
-
-
-Please reach out to our [Professional Services](https://pantheon.io/professional-services) team for information on site migration services if you have an existing Composer-managed WordPress site that you would like to migrate to the Pantheon platform.
-
-
-
-1. Review [Composer's documentation](https://getcomposer.org/doc/) to understand how Composer can be used independently of WordPress.
-
-1. Review [Composer Fundamentals Dependencies](/guides/composer#dependencies).
-
-1. Review [Managing Core as Project Dependency](/guides/composer#managing-core-as-a-project-dependency).
-
-## More Resources
-
-- [Composer Fundamentals and WebOps Workflows](/guides/composer)
-- [Roots Bedrock](https://roots.io/bedrock/)
\ No newline at end of file
diff --git a/source/content/guides/wordpress-composer/02-wordpress-composer-managed.md b/source/content/guides/wordpress-composer/02-wordpress-composer-managed.md
deleted file mode 100644
index ca4263062d..0000000000
--- a/source/content/guides/wordpress-composer/02-wordpress-composer-managed.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-title: WordPress with Composer on Pantheon
-subtitle: Create a Composer-managed WordPress Site with Bedrock
-description: Learn more about Bedrock and Composer-managed WordPress sites.
-contenttype: [guide]
-innav: [false]
-categories: [dependencies]
-cms: [wordpress]
-audience: [development]
-product: [--]
-integration: [--]
-tags: [wordpress]
-contributors: [whitneymeredith, jspellman814, jazzsequence]
-layout: guide
-showtoc: true
-permalink: docs/guides/wordpress-composer/wordpress-composer-managed
-anchorid: wordpress-composer-managed
----
-
-This section provides information on how to use Bedrock with Integrated Composer on a WordPress site.
-
-WordPress does not natively support [Composer](https://getcomposer.org/), however, [Bedrock](https://roots.io/bedrock/) is a WordPress-specific framework for using Composer on WordPress sites.
-
-## Requirements
-
-- [PHP version](/guides/php/php-versions#verify-current-php-versions) 8.0 or greater
-- [Composer](https://getcomposer.org/)
-
-## Create Your Site
-
-There are two ways you can spin up a site using WordPress Composer Managed:
-
-- Running the following terminus command:
-
- ```bash{promptUser: user}
- terminus site:create --org ORG --region REGION -- "WordPress (Composer Managed)"
- ```
-
-- Using this [site create link](https://dashboard.pantheon.io/sites/create?upstream_id=90a683cd-4e03-4832-9b49-be97ab2a0be4).
-
-The site you create will be based on the Pantheon-maintained [WordPress Composer Managed](https://github.com/pantheon-upstreams/wordpress-composer-managed) upstream. Once this install completes, visit the Dev environment and follow the prompts to complete the CMS installation.
-
-Review the sections below for important information about your site, including an explanation of the directory structure and essential configuration actions.
-
-## Use Roots Bedrock
-
-### Environment Variables
-
-Bedrock makes use of an `.env` file to store environment variables. Pantheon takes care of many of these variables in `.env.pantheon`. You may set your own environment variables in a new `.env` or environment variables that are local-only in `.env.local` using the `.env.example` as a guide. Wrap values that may contain non-alphanumeric characters with quotes, or they may be incorrectly parsed.
-
-### WordPress Config
-
-The `wp-config.php` file is located in the `web` directory. As with other WordPress sites on Pantheon, much of this is taken care of for you in `wp-config-pantheon.php`. Application-level configuration takes place in `config/application.php` while platform-specific updates are made in `config/application.pantheon.php`. This means that `config/application.php` can be modified for your WordPress configuration settings without fear of conflicts with the upstream. Any configuration changes should be made to your `config/appliction.php` **not** your `wp-config.php` file directly.
-
-You can learn more about WordPress configuration with Bedrock in the [Bedrock Configuration docs](https://docs.roots.io/bedrock/master/configuration/).
-
-### Understand the WordPress Codebase
-
-Bedrock installs WordPress as a required package so updates can be managed by Composer. As such, the contents of the `wp-content` directory have been moved outside the WordPress codebase so changes can be made safely to files within those directories without conflicts. Learn more about [Bedrock's folder structure here](https://docs.roots.io/bedrock/master/folder-structure/).
-
-* Themes are installed into `web/app/themes/`
-* Plugins are installed into `web/app/plugins`
-* Must-use plugins are installed into `web/app/mu-plugins`
-* WordPress core is installed into `web/wp`
-* The WordPress admin dashboard is available at `https://example.com/wp/wp-admin/`
-
-### Using Composer to manage plugins and themes
-
-[Packagist](https://packagist.org) is a repository of Composer packages that are available by default to projects managed by Composer. Packagist libraries receive updates from their source GitHub repositories automatically.
-
-[WPackagist](https://wpackagist.org) is a Packagist-like mirror of the WordPress.org [plugin](https://wordpress.org/plugins) and [theme](https://wordpress.org/themes) repositories and is included with Bedrock out of the box.
-
-You can install packages from Packagist or WPackagist without any additional configuration using `composer require`.
-
-#### Require a Package from Packagist
-
-Some WordPress developers push their packages to Packagist in addition to the WordPress plugin and theme repositories. In this way, it may be beneficial to pull those packages directly from Packagist to get the latest code directly from the source.
-
-
-```bash{promptUser: user}
-composer require yoast/wordpress-seo
-```
-
-Packages that are flagged as `wordpress-plugin`, `wordpress-theme` or `wordpress-muplugin` in their `composer.json` files will be installed automatically in the appropriate `web/app/` directory by Composer.
-
-#### Requiring a package from WPackagist
-
-For all other plugins and themes that are not managed on Packagist, you can use `composer require` as well, using `wpackagist-plugin` or `wpackagist-theme` as the vendor and the plugin or theme slug as the package name.
-
-
-```bash{promptUser: user}
-composer require wpackagist-theme/twentytwentytwo
-```
-
-```bash{promptUser: user}
-composer require wpackagist-plugin/advanced-custom-fields
-```
-
-#### Check first
-It's generally a good idea when using either Packagist or WPackagist to check the repository before `require`ing the package. If you search Packagist for a WordPress plugin or theme and don't see it, you can be sure that if it exists in the WordPress plugin or theme repository, it will be available on WPackagist. Checking WPackagist for the package can be beneficial if you want to check what versions are available.
-
-### Updating dependencies
-
-To update all Composer dependencies, run:
-
-```bash{promptUser: user}
-composer update
-```
-
-This will update all Composer-managed packages according to the version constraints in your `composer.json` file. For more information on Composer version constraints, see the [Composer documentation](https://getcomposer.org/doc/articles/versions.md).
-
-To update a specific package, run:
-
-```bash{promptUser: user}
-composer update vendor/package
-```
-
-Replace `vendor/package` with the package name you want to update. This will update only the named package to the latest version that matches the version constraints in your `composer.json` file.
-
-## Troubleshooting
-### Restore overwritten `composer.json`
-Sometimes, when a given upstream update includes changes to the `composer.json` file, it can conflict with your site's `composer.json` file. In these cases, applying the upstream update could result in the loss of content in your `composer.json` file.
-
-After applying such an update, check the commit log in the site dashboard. If you see many packages have been **removed**, you'll know the site's `composer.json` file has been overwritten by the upstream and needs to be resotred:
-
-![Pantheon update removing Composer packages](../../../images/wordpress-composer/02-wordpress-composer-json-removals.png)
-
-The easiest way to resolve this is to simply back up a copy of your current `composer.json` file locally before applying core updates. Then, apply the updates on Pantheon and `git pull` them into your local repository. From there, you can then restore the contents of `composer.json` based on your local back up of the file, run `composer update` and commit the changes.
-
-This may miss out on any actual updates to the `composer.json` in the upstream, so it's a good idea to check the [`composer.json` in the upstream repository](https://github.com/pantheon-upstreams/wordpress-composer-managed/blob/main/composer.json) to see if there are any changes you might want to incorporate into your own `composer.json` file.
-
-**Note:** If your site is using the Decoupled upstream for Front End Sites, the [`composer.json` is in the Decoupled WordPress (Composer Managed) upstream repository](https://github.com/pantheon-upstreams/decoupled-wordpress-composer-managed/blob/main/composer.json)
-
-## Report an Issue
-
-Create an [issue in the Github repo](https://github.com/pantheon-systems/wordpress-composer-managed/issues) for the team to review and address if you discover an issue with the WordPress Composer Managed upstream.
-
-Visit [our community Slack](https://pantheon-community.slack.com/archives/CT8MC5Y0K) (you can sign up for the [Pantheon Slack channel here](https://slackin.pantheon.io/) if you don't already have an account).
-
-## More Resources
-
-- [Bedrock Documentation](https://roots.io/bedrock/)
-- [Install and Configure Lando for WordPress](/guides/local-development/lando-wordpress)
diff --git a/source/content/guides/wordpress-composer/03-create-wp-site-composer-ci-auto-test.md b/source/content/guides/wordpress-composer/03-create-wp-site-composer-ci-auto-test.md
deleted file mode 100644
index 7c94e8882b..0000000000
--- a/source/content/guides/wordpress-composer/03-create-wp-site-composer-ci-auto-test.md
+++ /dev/null
@@ -1,235 +0,0 @@
----
-title: WordPress with Composer on Pantheon
-subtitle: Create a Composer-managed WordPress Site with Terminus Build Tools
-description: Learn how to create a WordPress Site that uses Composer, Continuous Integration, and Automated Testing on Pantheon
-contenttype: [guide]
-innav: [false]
-categories: [dependencies]
-cms: [wordpress]
-audience: [development]
-product: [--]
-integration: [--]
-tags: [wordpress]
-contributors: [whitneymeredith,jazzsequence]
-showtoc: true
-permalink: docs/guides/wordpress-composer/create-wp-site-composer-ci-auto-test
----
-
-This section provides steps to create a new Pantheon WordPress site that will use [Composer](https://getcomposer.org/), Continuous Integration (CI), and Automated Testing. This guide will get you started, but you will need to customize and maintain the CI/testing set up for your projects.
-
-
-
-Pantheon has a [WordPress (Composer Managed)](/guides/wordpress-composer/wordpress-composer-managed) upstream. You can use this upstream to create a Composer-managed WordPress site with **Bedrock**. **Terminus Build Tools** does not currently support the Bedrock-based WordPress (Composer Managed) upstream.
-
-
-
-## Requirements
-
-- [Terminus Build Tools Plugin](https://github.com/pantheon-systems/terminus-build-tools-plugin)
- - You must use the [Build Tools 3.x release](https://github.com/pantheon-systems/terminus-build-tools-plugin/tree/3.x) if you are using **Terminus 3**.
-- [PHP version](/guides/php/php-versions#verify-current-php-versions) 7.2 or greater
-
-## Create Your Site
-
-1. Use the [Terminus Build Tools Plugin](https://github.com/pantheon-systems/terminus-build-tools-plugin).
-
- - The Terminus Build Tools plugin will scaffold the new project, including:
-
- - A Git repository
- - A free [Pantheon sandbox](/guides/legacy-dashboard/create-sites#sandbox-sites) site
- - [Continuous Integration](https://pantheon.io/integrations/continuous-integration) configuration
- - Credential set up
-
-1. Run the following command to spin up your site:
-
- ```bash
- terminus build:project:create wp
- ```
-
- - This site will be based on the Pantheon-maintained [WordPress Composer repository](https://github.com/pantheon-systems/example-wordpress-composer).
- - This repository has a similar structure to the [Bedrock-based WordPress (Composer Managed) upstream](https://github.com/pantheon-upstreams/wordpress-composer-managed) but does not use Bedrock. This repository will be deprecated in the future in favor of integrating the Bedrock-based upstream into Build Tools.
-
-1. Review the sections below for important information about your site, including an explanation of the directory structure, Continuous Integration functions, and essential configuration actions.
-
-## Review Important Directories and Update File Paths
-
-### `/web` Directory
-
-Your site is stored and served from the `/web` subdirectory located next to the `pantheon.yml` file. You must store your website in this subdirectory for a Composer-based workflow. Placing your website in the subdirectory also allows you to store tests, scripts, and other files related to your project in your repo without affecting your web document root. It also provides additional security by preventing web access to files outside of the document root through Pantheon.
-Your files may still be accessible from your version control project if it is public. See the [`pantheon.yml` documentation](/pantheon-yml#nested-docroot) for details.
-
-1. Verify that your website is stored in the `/web` subdirectory.
-
-### `/web/wp` Directory
-
-Your directories and files within the `/web` directory are stored in different locations compared to a default WordPress installation. [WordPress allows installing WordPress core in its own directory](https://developer.wordpress.org/advanced-administration/server/wordpress-in-directory/), which is necessary when installing WordPress with Composer. The overall layout of directories in the repo is similar to [Bedrock](https://github.com/roots/bedrock).
-
-1. Verify that the `WP_SITEURL` file is in the `/web/wp` directory to allow WordPress core functions to work correctly.
-
-1. Review the `/web/wp-config.php` file for key settings and move other files to the to the `/web/wp` directory as necessary.
-
-### `composer.json` File
-
-This project uses Composer to manage third-party PHP dependencies. Some files, such as `web/wp`, may not be visible in the repository. This is because WordPress core and its plugins are installed via Composer and ignored in the `.gitignore` file.
-
-Third-party WordPress dependencies, such as plugins and themes, are added to the project via `composer.json` file. The `composer.lock` file keeps track of the exact dependency version. Composer installer-paths are used to ensure the WordPress dependencies are downloaded into the appropriate directory.
-
-Non-WordPress dependencies are downloaded to the `/vendor` directory.
-
-1. Place all dependencies in the **require** section of your `composer.json` file.
-
- - This includes dependencies that are only used in non-Live environments. All dependencies in the **require** section are pushed to Pantheon.
-
-1. Place all dependencies that are not a part of the web application but are necessary to build or test the project in the **require-dev** section.
-
- - Example dependencies are `php_codesniffer` and `phpunit`. Dev dependencies are deployed to Dev and Multidev environments, but not to Test and Live environments.
-
-## Continuous Integration
-
-The scripts that run on Continuous Integration are stored in the `.ci` directory. Provider-specific configuration files, such as `.circle/config.yml` and `.gitlab-ci.yml` use these scripts.
-
-The scripts are organized into subdirectories according to their function:
-
-- Build
-- Deploy
-- Test
-
-### Build Scripts .ci/build
-
-- `.ci/build` script builds an artifact suitable for deployment.
-
-- `.ci/build/php` installs PHP dependencies with Composer.
-
-### Build Scripts `.ci/deploy`
-
-All scripts stored in the `.ci/deploy` directory facilitate code deployment to Pantheon.
-
- - `.ci/deploy/pantheon/create-multidev` creates a new [Pantheon Multidev environment](/guides/multidev) for branches other than the default Git branch. Note that not all users have Multidev access. Please consult the [Multidev FAQ doc](/guides/multidev/multidev-faq) for details.
-
-- `.ci/deploy/pantheon/dev-multidev` deploys the built artifact to either the Pantheon Dev or a Multidev environment, depending on the Git branch.
-
-## Automated Test Scripts `.ci/tests`
-
-The `.ci/tests` scripts run automated tests. You can add or remove scripts depending on your testing needs.
-
-### Static Testing
-
-- `.ci/test/static` and `tests/unit` are static tests that analyze code without executing it. These tests are good at detecting syntax errors but not functionality errors.
-
-- `.ci/test/static/run` runs [PHP CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) with [WordPress coding standards](https://github.com/WordPress/WordPress-Coding-Standards), [PHP Unit](https://phpunit.de/), and [PHP syntax checking](https://phpcodechecker.com/).
-
-- `tests/unit/bootstrap.php` bootstraps the Composer autoloader.
-
-- `tests/unit/TestAssert.php` provides an example Unit test.
-
-1. Create all project-specific test files in the `tests/unit` directory.
-
-### Visual Regression Testing
-
-The scripts stored in the `.ci/test/visual-regression` directory run visual regression testing through a headless browser to take screenshots of web pages and compare them for visual differences.
-
-- `.ci/test/visual-regression/run` runs [BackstopJS](https://github.com/garris/BackstopJS) visual regression testing.
-
-- `.ci/test/visual-regression/backstopConfig.js` is the [BackstopJS](https://github.com/garris/BackstopJS) configuration file.
-
-1. Update the settings in `.ci/test/visual-regression/backstopConfig.js` file for your project.
-
- - For example, the `pathsToTest` variable determines the URLs to test.
-
-## Behat Testing
-
-Behat testing uses `.ci/test/behat` and `tests/behat`. [Behat](https://behat.org/en/latest/) is an acceptance/end-to-end testing framework written in PHP. It facilitates testing the fully-built WordPress site on Pantheon. [WordHat](https://github.com/paulgibbs/behat-wordpress-extension) is used to help integrate Behat and WordPress.
-
-- `.ci/test/behat/initialize` deletes any existing WordPress user from Behat testing and creates a backup of the environment to be tested.
-
-- `.ci/test/behat/run` sets the `BEHAT_PARAMS` environment variable with dynamic information necessary for Behat and configures it to use [WP-CLI](https://wp-cli.org/) via [Terminus](/terminus). This script also creates the necessary WordPress user, starts headless Chrome, and runs Behat.
-
-- `.ci/test/behat/cleanup` restores the previously made database backup, deletes the WordPress user created for Behat testing, and saves screenshots taken by Behat.
-
-- `tests/behat/behat-pantheon.yml` runs tests against the Pantheon site.
-
-- `tests/behat/tests/behat/features` stores Behat `.feature` extension test files.
-
-1. Store all `.feature` extension test files in the `tests/behat/tests/behat/features` directory.
-
- - The example tests must be replaced with project-specific tests.
-
- - `tests/behat/tests/behat/features/visit-homepage.feature` is a Behat test file that visits the homepage and verifies a `200` response.
-
- - `tests/behat/tests/behat/features/admin-login.feature` is a Behat test file that logs into the WordPress dashboard as an administrator and verifies access to new user creation.
-
- - `tests/behat/tests/behat/features/admin-login.feature` is a Behat test file that logs into the WordPress dashboard as an administrator, updates the `blogname` and `blogdescription` settings, clears the Pantheon cache, visits the home page, and verifies how the updated blog name and description appear.
-
-
-## GitHub Actions
-
-This section provides information enabling GitHub Actions for your site.
-
-The Build Tools Site will configure GitHub Actions automatically if it was passed as the selected CI when creating the site. You will need to consult advanced external resources if you're working with an existing non-Build Tools site and want to add Github Actions.
-
-The steps to enable GitHub Actions for an existing Build Tools site created with another CI (for example, CircleCI) shown below might work for you.
-
-1. Copy `.ci/.github` to `.github`.
-
-1. Add the following secrets to the Github Actions configuration:
-
- - `ADMIN_EMAIL`
-
- - `ADMIN_PASSWORD`
-
- - `ADMIN_USERNAME`
-
- - `TERMINUS_TOKEN`
-
- - `TERMINUS_SITE`
-
- - `SSH_PRIVATE_KEY`
-
- - `GH_TOKEN`
-
-
-## Working Locally with Lando
-
-Complete the one-time steps below to get started using [Lando](https://docs.devwithlando.io/) for local development. Please note than Lando is an independent product and is not supported by Pantheon. Refer to the [Lando documentation](https://docs.devwithlando.io/) for more information.
-
-1. [Install Lando](https://docs.lando.dev/getting-started/installation.html) if it is not already installed.
-
-1. Clone your project repository from GitHub to your local.
-
-1. Manually create a `.lando.yml` file with your preferred configuration, based on the WordPress recipe.
-
-1. Run `lando start` to start Lando.
-
-1. Save the local site URL.
-
- - The local site URL should look similar to: `https://.lndo.site.`
-
-1. Run the command below to download dependencies.
-
- ```bash
- `lando composer install --no-ansi --no-interaction --optimize-autoloader --no-progress`
- ```
-
-1. Run the command below to download the media files and database from Pantheon.
-
- ```bash
- `lando pull --code=none`
- ```
-
-1. Visit the local site URL saved in the preceding steps.
-
- - You should now be able to edit your site locally. The steps above do not need to be completed on subsequent starts. You can stop Lando with `lando stop` and start it again with `lando start`.
-
-1. Run all Composer, Terminus and wp-cli commands in Lando instead of the host machine.
-
- - This is done by prefixing the desired command with `lando`. For example, after a change to `composer.json` run `lando composer update` rather than `composer update`.
-
-
-
-Do NOT push/pull code between Lando and Pantheon directly. All code should be pushed to GitHub and deployed to Pantheon through a continuous integration service, such as CircleCI.
-
-
-
-## More Resources
-
-- [Install and Configure Lando for WordPress](/guides/local-development/lando-wordpress)
diff --git a/source/content/guides/wordpress-composer/04-multisite-configuration.md b/source/content/guides/wordpress-composer/04-multisite-configuration.md
deleted file mode 100644
index bdc95a0349..0000000000
--- a/source/content/guides/wordpress-composer/04-multisite-configuration.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: WordPress with Composer on Pantheon
-subtitle: Multisite Configuration
-description: Learn how to configure a WordPress multisite with Composer on Pantheon.
-contenttype: [guide]
-innav: [false]
-categories: [dependencies]
-cms: [wordpress]
-audience: [development]
-product: [--]
-integration: [--]
-tags: [wordpress]
-contributors: [jazzsequence]
-layout: guide
-showtoc: true
-permalink: docs/guides/wordpress-composer/multisite-configuration
-anchorid: multisite-configuration
----
-
-This section provides information on how to configure your WordPress (Composer Managed) site on Pantheon for WordPress multisite. This guide assumes that you have already set up a [WordPress Multisite upstream](/guides/multisite/#request-a-wordpress-multisite) and created a new site using that upstream. If you haven't already, you should also read through our [guide on WordPress Multisite](/guides/multisite) before beginning this process.
-
-Because Bedrock uses `Config::define()` and `config/application.php` instead of traditional `define()` statements in `wp-config.php`, you will not be able to use WP-CLI via Terminus to enable multisite as documented in our standard [multisite configuration guide](/guides/multisite/config/).
-
-
-
-Adjust placeholders in code snippets as needed throughout this guide. This includes placeholders such as `` and `` in Terminus commands, in addition to placeholders in brackets `<>` in larger code blocks.
-
-
-
-## Set Up WordPress Multisite
-
-1. Set the site's connection mode to Git:
-
- ```bash{promptUser: user}
- terminus connection:set .dev git
- ```
-2. Open the `config/application.php` file in your site's codebase and add the following line anywhere _above_ the `Config::apply();` line:
-
- ```php
- Config::define( 'WP_ALLOW_MULTISITE', true );
- ```
-3. Visit your development site's WordPress admin and navigate to **Tools** > **Network Setup**.
- ![Network Setup page](../../../images/wordpress-composer/04-multisite-network-setup.png)
-4. Choose **Sub-domains** or **Sub-directories** (depending on your needs), fill in the Network Title and Admin Email, and click **Install**.
-5. You will be given instructions to update your `config/application.php` file. Below where you added the `WP_ALLOW_MULTISITE` line, copy and paste the code provided. The `SUBDOMAIN_INSTALL` value will be `true` or `false` depending on the option you chose in the previous step. For example, if you chose subdirectories, your `config/application.php` file should look like this:
-
- ```php
- Config::define( 'MULTISITE', true );
- Config::define( 'SUBDOMAIN_INSTALL', false );
- // Use PANTHEON_HOSTNAME if in a Pantheon environment, otherwise use HTTP_HOST.
- Config::define( 'DOMAIN_CURRENT_SITE', defined( 'PANTHEON_HOSTNAME' ) ? PANTHEON_HOSTNAME : $_SERVER['HTTP_HOST'] );
- Config::define( 'PATH_CURRENT_SITE', '/' );
- Config::define( 'SITE_ID_CURRENT_SITE', 1 );
- Config::define( 'BLOG_ID_CURRENT_SITE', 1 );
- ```
-6. Save your changes and commit them to your Git repository. WordPress will prompt you to log back in after you push the changes.
-7. Log into your site. When you log back into your WordPress admin dashboard, you will see a new **My Sites** menu item in the top left corner. This is where you can manage your network of sites. You now have a WordPress subdirectory multisite network set up on a WordPress (Composer Managed)-based upstream.
- ![My Sites](../../../images/wordpress-composer/04-multisite-my-sites.png)
-
-## Using Subdomain Multisite on Pantheon
-
-Pantheon does not support sub-subdomains on the `pantheonsite.io` platform domain. This means that sub-sites on a subdomain multisite will not be accessible by default. See the [Mapping Custom Hostnames](/guides/multisite/config/#map-custom-hostnames-subdomain-configurations-only) panel in the Multisite Configuration guide for how to set up a custom domain for your sub-sites.
-
-## Multisite Search and Replace with WordPress (Composer Managed)
-Currently, the built-in dashboard [WordPress Multisite Search and Replace](/guides/multisite/search-replace/) does not support Composer-based WordPress multisites. To perform a search and replace on a WordPress (Composer Managed) multisite, you will need to use WP-CLI via Terminus manually. For more information, see our [WordPress Multisite Search and Replace](guides/multisite/workflows/#run-wp-cli-search-replace-manually) guide.
-
-## More Information
-
-* [WordPress Multisite Configuration](/guides/multisite/config/)
-* [WordPress Multisite Search and Replace](/guides/multisite/search-replace/)
-* [WordPress Multisite documentation](https://developer.wordpress.org/advanced-administration/multisite/)
-* [WordPress Multisite Domain Mapping](https://developer.wordpress.org/advanced-administration/multisite/domain-mapping/)
diff --git a/source/content/guides/wordpress-composer/06-wordpress-ic.md b/source/content/guides/wordpress-composer/06-wordpress-ic.md
deleted file mode 100644
index 08d4885780..0000000000
--- a/source/content/guides/wordpress-composer/06-wordpress-ic.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-title: WordPress with Composer on Pantheon
-subtitle: Create a Composer-managed WordPress Site with Integrated Composer and Custom Upstreams
-description: Learn how to use Integrated Composer and Custom Upstreams with WordPress on Pantheon.
-contenttype: [guide]
-innav: [false]
-categories: [dependencies]
-cms: [wordpress]
-audience: [development]
-product: [--]
-integration: [--]
-tags: [wordpress]
-contributors: [whitneymeredith,jazzsequence]
-showtoc: true
-permalink: docs/guides/wordpress-composer/wordpress-ic
----
-
-[Integrated Composer](/guides/integrated-composer) is a Pantheon platform feature. Integrated Composer extends Composer functionality to WordPress core files and treats them as a managed dependency. Integrated Composer lets you deploy your site on Pantheon with one-click updates for both upstream commits and Composer dependencies, while still receiving upstream updates.
-
-## WordPress with Integrated Composer on Pantheon
-
-Pantheon maintains a [Composer-enabled WordPress Upstream](https://github.com/pantheon-upstreams/wordpress-composer-managed) repository. This is the recommended starting point for forking new upstreams that work with Pantheon's Integrated Composer build process.
-
-This repository is still under active development. As with all custom upstreams, you are responsible for maintaining your custom upstream and making sure it is up-to-date with the source upstream. There is no guarantee of backwards compatibility.
-
-Pantheon upstreams influence the Composer packages that are included in downstream sites by including two `composer.json` files in this repository:
-
-- The root `/composer.json` file is owned by the downstream site. Maintainers of _custom upstreams_ should avoid editing this file. This allows the downstream site maintainer to adjust the `/composer.json` file without creating potential conflicts when merging upstream updates.
-
-- The `upstream-configuration/composer.json` file is owned by the upstream maintainer. It is included by the root `composer.json` file, and allows upstreams to add or remove packages from downstream sites. Changes are automatically incorporated into the downstream site whenever upstream updates are applied. Pantheon has developed a tool to help you work with upstream configuration called [upstream-management](https://packagist.org/packages/pantheon-systems/upstream-management), which you can install by using `composer require pantheon-systems/upstream-management:^1`.
-
-## Create Your WordPress Integrated Composer Site
-
-Follow the steps in this section to create a new WordPress site using Integrated Composer and Upstream.
-
-1. Fork the [Pantheon-maintained WordPress Upstream repository](https://github.com/pantheon-upstreams/wordpress-composer-managed).
-
-1. [Connect your repository](/guides/custom-upstream/create-custom-upstream#connect-repository-to-pantheon) to Pantheon.
-
-1. Update the **require** section of the root `/composer.json` file to match the name you chose in the preceding step.
-
-## Add and Remove Packages
-
-1. Use `composer require`in the `upstream-configuration` directory (or `composer upstream-require` if using `upstream-management`) to edit the upstream `composer.json` file.
- - The repository template places a theme in the upstream `composer.json` file. This works well for downstream sites that all use the same theme. You should remove themes from the upstream `composer.json` file if you do not intend to use the upstream to lock downstream sites into a particular theme. You cannot remove installed packages from downstream sites if the packages were included from the upstream site.
-
-## Maintain Your Integrated Composer Fork
-
- There are some special considerations to keep in mind if you intend to make modifications to your upstream based on this repository.
-
-1. Increase the version number listed in the `upstream-configuration/composer.json` file each time you make edits.
- - Composer checks the contents of the root `/composer.json` file for changes that should be pushed to your upstream configuration.
-
-1. Verify your changes to the `upstream-configuration/composer.json` file by running `composer install` or `composer update` in the `upstream-configuration` directory.
- - Be careful not to rely on ["root-only" properties of composer.json](https://getcomposer.org/doc/04-schema.md).
-
-## Manage Your WordPress Integrated Composer Site
-
-1. Review the [Integrated Composer Guide](/guides/integrated-composer) for information on how to:
- - [Manage Core as a Project Dependency](/guides/composer#managing-core-as-a-project-dependency)
- - [Serve Sites from the Web Subdirectory](/nested-docroot)
- - [Add a Dependency to an Individual Site](/guides/integrated-composer#add-a-dependency-to-an-individual-site)
- - [Add a Package from a Private Repository](/guides/integrated-composer/private-repo-package)
- - [Apply One-click Updates](/guides/integrated-composer/one-click-updates)
- - [Add dependencies to your Upstream](/guides/integrated-composer/ic-upstreams)
-
-1. Review the [Custom Upstreams](/guides/custom-upstream/maintain-custom-upstream) documentation to learn how to:
- - [Test and Release Pantheon Core Updates](/guides/custom-upstream/maintain-custom-upstream#test-and-release-pantheon-core-updates)
- - [Automatically Resolve Conflicts from the Command Line](/guides/custom-upstream/maintain-custom-upstream#automatically-resolve-from-the-command-line)
- - [Tips and Tricks for Maintaining Custom Upstreams](/guides/custom-upstream/maintain-custom-upstream#delete-custom-upstream)
- - [Delete a Custom Upstream](/guides/custom-upstream/maintain-custom-upstream#delete-custom-upstream)
-
-1. Review the [Pantheon YAML Configuration Files](/pantheon-yml) documentation to learn about:
- - [Custom Upstream Configurations](/pantheon-yml#custom-upstream-configurations)
-
-## More Resources
-
-- [Best Practices for Maintaining Custom Upstreams](/guides/custom-upstream/maintain-custom-upstream)
-- [Composer Fundamentals and WebOps Workflows](/guides/composer)
-- [Create a Composer-managed WordPress Site with Bedrock](/guides/wordpress-composer/wordpress-composer-managed)
diff --git a/source/content/guides/wordpress-configurations/05-wordpress-cache-plugin.md b/source/content/guides/wordpress-configurations/05-wordpress-cache-plugin.md
index 1d99451338..3b6b221310 100644
--- a/source/content/guides/wordpress-configurations/05-wordpress-cache-plugin.md
+++ b/source/content/guides/wordpress-configurations/05-wordpress-cache-plugin.md
@@ -27,9 +27,9 @@ You can clear the site cache manually or automatically.
## Pantheon Page Cache Plugin Configuration
-### Increase the Default Time to Live Value
+### Increase the Default Page Cache Max Age Value
-You can increase the default time to live value to improve the chances that a visitor will request a cached page. Cached page requests reduce page load times.
+You can increase the default page cache max age value to improve the chances that a visitor will request a cached page. Cached page requests reduce page load times.
1. Log in to your WordPress site as an administrator.
@@ -40,10 +40,18 @@ You can increase the default time to live value to improve the chances that a vi
1. Modify the **Default Cache Time**.
When [Pantheon Advanced Page Cache](https://wordpress.org/plugins/pantheon-advanced-page-cache) is active, your site content should always be fresh and served quickly from Pantheon's Edge Cache. This is why we recommend caching content for a minimum of 1 week. Every page served from the Edge Cache won't hit your application container's PHP workers or MySQL database, which means faster page load times and a better user experience for site visitors.
+
+ Since the 2.0 version of Pantheon Advanced Page Cache, the input type for the Page Cache Max Age setting has been changed to a dropdown with the values 1 week, 1 month and 1 year. This setting can be overridden using the `pantheon_cache_default_max_age` filter as described below.
1. Click **Save Changes**.
-![WordPress Pantheon Cache Plugin settings](../../../images/WordPress_Pantheon-Cache-Settings.png)
+
+
+We strongly recommend using the [Pantheon Advanced Page Cache](https://wordpress.org/plugins/pantheon-advanced-page-cache) plugin to ensure that your site content is always fresh and served quickly from Pantheon's Edge Cache. When Pantheon Advanced Page Cache is active, the Pantheon Page Cache admin page will look like the screenshot below. If the PAPC plugin is not active, the Page Cache Max Age setting will be a text input.
+
+
+
+![WordPress Pantheon Cache settings](../../../images/wordpress-configurations/05-pantheon-page-cache-admin.png)
### Override the default max age
diff --git a/source/content/guides/wordpress-configurations/06-wordpress-custom-code.md b/source/content/guides/wordpress-configurations/06-wordpress-custom-code.md
index cce5d44b94..0235e568ab 100644
--- a/source/content/guides/wordpress-configurations/06-wordpress-custom-code.md
+++ b/source/content/guides/wordpress-configurations/06-wordpress-custom-code.md
@@ -1,7 +1,7 @@
---
title: WordPress Configurations Guide
subtitle: Manage Custom Code for WordPress with Plugins
-description: Learn how to manage custom plugins or themes for WordPress sites with GitHub Updater or WP Pusher.
+description: Learn how to manage custom plugins or themes for WordPress sites with Git Updater or WP Pusher.
contenttype: [guide]
innav: [false]
categories: [config]
@@ -10,7 +10,8 @@ audience: [development]
product: [--]
integration: [plugins]
tags: [workflow, code]
-contributors: [afragen, petersuhm]
+contributors: [afragen, petersuhm, jazzsequence]
+reviewed: "2024-10-14"
permalink: docs/guides/wordpress-configurations/wordpress-custom-code
---
@@ -18,7 +19,7 @@ This section provides information on how to manage custom plugins and themes on
Extending WordPress with custom code is a common part of the development lifecycle. It's essential that extensions are maintained independently from your sites and projects to optimize workflows and to allow custom code to be reused easily. You should also separate function from design to allow changes to persist when you swap themes. This method allows you to avoid dropping code into the current theme's `functions.php` file and pasting snippets when you want to reuse code in another project.
-You can manage custom code separate from your projects within site-specific [plugins](https://codex.wordpress.org/Writing_a_Plugin). This allows you to scope out an update strategy to distribute changes easily. [GitHub Updater](https://github.com/afragen/github-updater) or [WP Pusher](https://wppusher.com/) are good options for this workflow.
+You can manage custom code separate from your projects within site-specific [plugins](https://codex.wordpress.org/Writing_a_Plugin). This allows you to scope out an update strategy to distribute changes easily. [Git Updater](https://github.com/afragen/git-updater) or [WP Pusher](https://wppusher.com/) are good options for this workflow.
@@ -34,31 +35,29 @@ Pantheon does not support Git submodules (placing a Git repository within a subd
Refer this [blog post](https://pantheon.io/blog/wordpress-development-git) for more information on separating custom code.
-## GitHub Updater
+## Git Updater
-[GitHub Updater](https://github.com/afragen/github-updater) is an open-source plugin developed by [Andy Fragen](https://thefragens.com) that extends the existing notification and update mechanisms within WordPress to plugins and themes hosted outside of the official WordPress repository on GitHub, Bitbucket, or GitLab. GitHub Updater displays update notifications within the WordPress dashboard for public and private repositories.
+[Git Updater](https://github.com/afragen/git-updater) is an open-source plugin developed by [Andy Fragen](https://git-updater.com/) that extends the existing notification and update mechanisms within WordPress to plugins and themes hosted outside of the official WordPress repository on GitHub, Bitbucket, GitLab, Gitea or GitHub Gists. Git Updater displays update notifications within the WordPress dashboard for public and private repositories.
-1. Modify your plugin and/or theme to add support for the GitHub Updater by providing the required declarations. The following [plugin example](https://github.com/afragen/github-updater/#plugins) should be placed within the plugin's header:
+1. Add the [relevant header line](https://git-updater.com/knowledge-base/usage/) to your plugin or theme header block to add support for the Git Updater depending on where your code is hosted.(`GitHub Plugin URI`, `). The following [plugin example](https://git-updater.com/knowledge-base/usage/#articleTOC_2) should be placed within the plugin's header:
```bash
- /*
- Plugin Name: GitHub Updater
- Plugin URI: https://github.com/afragen/github-updater
- Description: A plugin to automatically update GitHub, Bitbucket or GitLab hosted plugins and themes. It also allows for remote installation of plugins or themes into WordPress.
- Version: 1.0.0
- Author: Andy Fragen
- License: GNU General Public License v2
- License URI: https://www.gnu.org/licenses/gpl-2.0.html
- Domain Path: /languages
- Text Domain: github-updater
- GitHub Plugin URI: https://github.com/afragen/github-updater
- GitHub Branch: master
- */
+ /**
+ * Plugin Name: My Cool Plugin
+ * Plugin URI: https://github.com/wpdeveloper/my-cool-plugin
+ * Description: A cool plugin that does cool things.
+ * Version: 1.0.0
+ * Author: WordPress Developer
+ * License: GNU General Public License v2
+ * License URI: https://www.gnu.org/licenses/gpl-2.0.html
+ * GitHub Plugin URI: https://github.com/wpdeveloper/my-cool-plugin
+ * GitHub Languages: https://github.com/wpdeveloper/my-cool-plugin-translations
+ */
```
- [Theme declarations](https://github.com/afragen/github-updater#themes) are made similarly within the `styles.css` file.
+ [Theme declarations](https://git-updater.com/knowledge-base/usage/#articleTOC_3) are made similarly within the `styles.css` file.
- As an alternative to adding declarations within the headers of plugins and themes, you can use the [GitHub Updater Additions](https://github.com/afragen/github-updater-additions) plugin, which will add the appropriate data via hooks in GitHub Updater.
+ As an alternative to adding declarations within the headers of plugins and themes, you can use the [Additions functionality inside the Git Updater plugin](https://git-updater.com/knowledge-base/git-updater-additions/), which will add the appropriate data via hooks in Git Updater.
1. Set the Dev environment's connection mode to SFTP within the Pantheon Dashboard or via [Terminus](/terminus):
@@ -66,23 +65,25 @@ Refer this [blog post](https://pantheon.io/blog/wordpress-development-git) for m
terminus connection:set . sftp
```
-1. Download the [latest release](https://github.com/afragen/github-updater/releases) of the GitHub Updater plugin (select the **zip** option).
+1. Download the [latest release](https://github.com/afragen/git-updater/releases) of the Git Updater plugin.
-1. Unzip the archive and rename the folder to `github-updater`, then re-zip the file.
+1. Install the plugin by uploading the zip file within the WordPress Dashboard on the Dev environment (`/wp-admin/plugin-install.php?tab=upload`).
-1. Install the plugin by uploading the renamed zip file within the WordPress Dashboard on the Dev environment (`/wp-admin/plugin-install.php?tab=upload`).
+1. Activate Git Updater from the Plugin page (`/wp-admin/plugins.php`).
-1. Activate GitHub Updater from the Plugin page (`/wp-admin/plugins.php`).
+1. Navigate to **Settings**, select **Git Updater**, and then select **Install Plugin**/**Install Theme** to install your custom extensions.
-1. Navigate to **Settings**, select **GitHub Updater**, and then select **Install Plugin**/**Install Theme** to install your custom extensions.
-
- Alternatively, you can upload your plugin/theme using the same method described above for installing the GitHub Updater plugin.
+ Alternatively, you can install the Git Updater plugin directly from the command line using Terminus:
+
+ ```bash{promptUser: user}
+ terminus wp . -- plugin install https://github.com/afragen/git-updater/releases/download/12.6.0/git-updater-12.6.0.zip
+ ```
Notifications within the WordPress dashboard will now include updates to your custom code. If expected updates are not found within `/wp-admin/update-core.php`, click **Check Again** to clear [transients](https://codex.wordpress.org/Transients_API), or wait for them to reset automatically.
## WP Pusher
-[WP Pusher](https://wppusher.com/) provides a similar method to GitHub Updater for managing your custom code, but with some key differences. WP Pusher is free for open source code hosted in public repositories. Supporting private repositories requires you to purchase a license. Currently, update notifications are not displayed within the WordPress dashboard, but you can configure the plugin to automatically install updates on Pantheon following a push to the remote repository (e.g. GitHub, Bitbucket, or GitLab). There are no declarations required within your plugin or theme. This means that modifications to existing custom extensions are not required.
+[WP Pusher](https://wppusher.com/) provides a similar method to Git Updater for managing your custom code, but with some key differences. WP Pusher is free for open source code hosted in public repositories. Supporting private repositories requires you to purchase a license. Currently, update notifications are not displayed within the WordPress dashboard, but you can configure the plugin to automatically install updates on Pantheon following a push to the remote repository (e.g. GitHub, Bitbucket, or GitLab). There are no declarations required within your plugin or theme. This means that modifications to existing custom extensions are not required.
1. [Download WP Pusher](https://wppusher.com/).
diff --git a/source/content/guides/wordpress-configurations/08-installing-updating-from-third-party-sources.md b/source/content/guides/wordpress-configurations/08-installing-updating-from-third-party-sources.md
new file mode 100644
index 0000000000..ca8d8dfcfa
--- /dev/null
+++ b/source/content/guides/wordpress-configurations/08-installing-updating-from-third-party-sources.md
@@ -0,0 +1,122 @@
+---
+title: WordPress Configurations Guide
+subtitle: Installing and Updating Plugins and Themes from Third-Party Sources
+description: Learn how to set up plugins and themes that are set up in external repositories.
+contributors: [jazzsequence, pwtyler, stevector]
+contenttype: [guide]
+innav: [false]
+categories: [config]
+cms: [wordpress]
+audience: [development]
+product: [--]
+integration: [plugins]
+tags: [code, plugins]
+reviewed: "2024-10-16"
+showtoc: true
+permalink: docs/guides/wordpress-configurations/installing-updating-from-third-party-sources
+---
+
+This section provides guidance on how to manage plugins that use third-party sources beyond the WordPress plugin repository. Such places include GitHub, Bitbucket, GitLab or self-hosted sources.
+
+
+
+All the guidance in this document is intended to be used in conjunction with Dev or Multidev environments on Pantheon where version-controlled files can be changed directly. [Pantheon's security practices lock down file permissions in the Test and Live environments]("guides/filesystem/files-directories#write-access-on-environments").
+
+
+
+## Using Git Updater to install and manage plugins (and themes) from Git repositories
+
+[Git Updater](https://github.com/afragen/git-updater) is a plugin that allows you to install and update plugins and themes from GitHub, Bitbucket, GitLab, or other self-hosted Git repositories. It provides both a mechanism that plugins can use to suggest updates from a Git-based repository as well as a user interface to install plugins from a Git repository that has not been previously configured to do so. Plugins and themes that use Git Updater can then be updated directly from the WordPress dashboard.
+
+Before you begin, make sure the Dev or Multidev environment in which you are working is set to [SFTP mode](/connection-modes).
+That mode can be changed either from the Pantheon dashboard or by using the Terminus `connection:set` command.
+
+```bash{promptUser: user}
+terminus connection:set . sftp
+```
+
+### Installing the Git Updater plugin
+
+Download the latest zip file for the Git Updater plugin from the [Git Updater website](https://git-updater.com/) or use [WP-CLI through Terminus](https://docs.pantheon.io/guides/wp-cli) to install the plugin from its zip file in the GitHub repository releases page:
+
+```bash{promptUser: user}
+terminus wp . -- plugin install https://github.com/afragen/git-updater/releases/download/12.6.0/git-updater-12.6.0.zip --force
+```
+
+Once installed, an option for Git Updater will appear under Settings in your WordPress admin dashboard.
+Clicking into it for the first time will prompt you to enter a license key or activate the free version.
+Once you've gone through the initial prompts, you will be presented with the default admin page for Git Updater which includes out-of-the-box support for GitHub-based plugins and themes.
+ ![Git Updater Settings](../../../images/wordpress-configurations/08-git-updater-admin.png)
+
+
+### Installing a plugin or theme from a Git repository
+
+To install a plugin or a theme from a GitHub repository, click on the "Install Plugin" or "Install Theme" tab and enter the Plugin URI (in the format `/` e.g. `pantheon-systems/pantheon-hud` ), the repository branch (default is `master`) and the remote repository host (either GitHub or a zip file).
+You can also specify a GitHub Personal Access Token for private GitHub repositories. Then click Install Plugin/Theme.
+ ![Git Updater Install Plugin](../../../images/wordpress-configurations/08-git-updater-install-plugin.png)
+
+### Updating plugins through Git Updater
+
+Themes and Plugins use a `GitHub Plugin URI` or `GitHub Theme URI` header string in the main plugin file (for plugins) or `style.css` (for themes) in order for the Git Updater to work to update those plugins or themes out of the box.
+
+It is also possible for plugins or themes to receive updates from GitHub or other sources using the Git Updater even if this header is not present by using the Additions tab.
+
+To add a plugin that gets updates from a Git repository but lacks the GitHub Plugin or Theme URI plugin header line, click on the Additions tab, enter the main plugin file name as the Repository Slug (e.g. `pantheon-hud/pantheon-hud.php`), the repository URI (in the format `/`, e.g. `pantheon-systems/pantheon-hud`), the branch (default is `master`), and whether the plugin or theme should look use a Release Asset (defaults to no release asset). Then click Save Changes.
+
+![Git Updater Additions](../../../images/wordpress-configurations/08-git-updater-additions.png)
+
+The Git Updater plugin will now check for updates from the specified repository and branch and will update the plugin or theme as necessary from that source rather than the default behavior.
+
+### Using Git Updater with non-GitHub Repositories
+
+Git Updater supports other repository hosts such as BitBucket, GitLab, Gitea and even GitHub Gists. To add support for any of these, go to the API Add-Ons page while your site is in SFTP mode and click Install & Activate for the add-on of your choice.
+
+![Git Updater API Add-Ons](../../../images/wordpress-configurations/08-git-updater-api-addons.png)
+
+## Using WP-CLI to install plugins and themes with their own self-hosted update mechanism
+
+Some plugins and themes have their own self-hosted update mechanism that allows them to receive updates from a third-party source. Usually, you can find a download link from the relevant plugin or theme author and upload the zip file to your WordPress site or unzip locally and add to your Pantheon site using SFTP or Git.
+
+However, you can also use WP-CLI through Terminus to install the plugin or theme from the source directly if there is a direct URL that can be used. The code below shows how to install Advanced Custom Fields from the Advanced Custom Fields site:
+
+```bash
+terminus wp . -- plugin install https://www.advancedcustomfields.com/latest/ --force
+```
+
+Adding the `--force` flag will ensure that the latest version of Advanced Custom Fields is installed even if a plugin with the same slug already exists on your site. (For more information, see the [WP-CLI documentation for `plugin install`](https://developer.wordpress.org/cli/commands/plugin/install/).
+
+## Using Composer to source plugins and packages
+
+Composer is a dependency manager for PHP similar to NPM for JavaScript projects.
+A `composer.json` file can be dropped into any project (including an existing WordPress site) to download packages from a specific source.
+Most often that package comes from a version-controlled repository (e.g. GitHub) through [Packagist](https://packagist.org).
+The [Composer documentation provides guidance](https://getcomposer.org/doc/05-repositories.md) on how to add projects that may not already be Composer-based or set up in Packagist so that virtually any source can be added to a `composer.json` file.
+For more information about using WordPress and Composer, refer to our [Integrated Composer documentation](https://docs.pantheon.io/guides/integrated-composer).
+For an example of how to use a custom Composer repository for a premium plugin, see our [Object Cache Pro documentation for our WordPress (Composer Managed) upstream](https://docs.pantheon.io/object-cache/wordpress#installation-and-configuration-for-composer-managed-wordpress-sites).
+
+For WordPress, [WPackagist.org](https://wpackagist.org) acts as a Composer-based mirror of the WordPress.org plugin and theme repository.
+WPackagist allows Composer-based WordPress installs to require any plugin or theme that exists in the WordPress repository. Referencing plugins through WPackagist will pull code from WordPress.org.
+For the purpose of this document, we will focus only on including packages from third-party sources.
+
+### Adding a plugin from Packagist.org
+
+Some packages, like our own [Pantheon Advanced Page Cache](https://github.com/pantheon-systems/pantheon-advanced-page-cache) plugin are distributed both through the [WordPress plugin repository](https://wordpress.org/plugins/pantheon-advanced-page-cache) and [Packagist](https://packagist.org/packages/pantheon-systems/pantheon-advanced-page-cache).
+
+Before you start, make sure you have the `composer/installers` package in your `composer/json` file.
+[`composer/installers`](https://packagist.org/packages/composer/installers) is a core Composer plugin that adds support for additional types of packages beyond the default package types.
+In the context of WordPress and Composer, Installers adds support for the `wordpress-plugin`, `wordpress-theme` and `wordpress-muplugin` package types – which means that when packages of those types are installed via Composer, they are stored in `wp-content/plugins`, `wp-content/themes` or `wp-content/mu-plugins`, respectively (as opposed to the default `/vendor` folder for other Composer packages).
+
+If you do not have the Installers package already installed, you can require it with composer using the following command:
+
+```bash{promptUser: user}
+composer require –dev composer/installers
+```
+
+Now, if you would like to source a Composer-based plugin through Packagist, you can do so by running `composer require /`, for example:
+
+```bash{promptUser: user}
+composer require pantheon-systems/pantheon-advanced-page-cache
+```
+
+You can use the search on Packagist.org to look for packages if you know the name of the plugin or the vendor (likely the plugin author) to see if there is built-in support for Composer-based installation.
+However, Composer also supports other VCS-based sources or even static zip files. [Refer to the documentation](https://getcomposer.org/doc/05-repositories.md#vcs) for more information about those types of advanced configuration.
diff --git a/source/content/guides/wordpress-developer/07-wordpress-s3.md b/source/content/guides/wordpress-developer/07-wordpress-s3.md
index 7bcb8c6427..cb24c5ce3d 100644
--- a/source/content/guides/wordpress-developer/07-wordpress-s3.md
+++ b/source/content/guides/wordpress-developer/07-wordpress-s3.md
@@ -10,8 +10,8 @@ audience: [development]
product: [--]
integration: [aws]
tags: [files]
-contributors: [sarahg,carl-alberto]
-reviewed: "2023-05-19"
+contributors: [sarahg,carl-alberto,jms-pantheon,jazzsequence]
+reviewed: "2024-10-23"
showtoc: true
permalink: docs/guides/wordpress-developer/wordpress-s3
---
@@ -141,78 +141,20 @@ You must configure the service within your [AWS Management Console](https://cons
You must install a plugin such as [S3 Uploads](https://github.com/humanmade/S3-Uploads) or [WP Offload Media](https://wordpress.org/plugins/amazon-s3-and-cloudfront/) to integrate S3 with WordPress.
-WP Offload Media requires a paid license but is configurable in the WordPress admin UI and offers a number of options and features, including multisite support. S3 Uploads is open-source but does not include an admin UI and requires [Terminus](/terminus) and [WP-CLI](/guides/wp-cli) for setup and migration.
+*WP Offload Media** is configurable in the WordPress admin UI and offers a number of options and features, including multisite support but requires a paid license to use custom domains (as opposed to a direct URL to the S3 bucket).
+
+**S3 Uploads** is open-source but does not include an admin UI and requires [WP-CLI](/guides/wp-cli) through [Terminus](/terminus) and [Composer](/guides/integrated-composer) for setup and migration.
### Install and Deploy S3 Uploads Plugin
+Follow the [S3 Uploads documentation](https://github.com/humanmade/S3-Uploads) to install and setup this plugin. Note that any WP-CLI commands in the documentation must be run through Terminus for a Pantheon site (e.g. `terminus wp -- . s3-uploads verify`).
+
This plugin has known [multisite issues](https://github.com/humanmade/S3-Uploads/pull/214). Consider [WP Offload Media](#install-and-deploy-wp-offload-media) if you need an alternative plugin with premium support and a multisite version.
-1. Download the latest plugin release from [Github](https://github.com/humanmade/S3-Uploads/releases) and extract it to `wp-content/plugins/`. Note that our documentation has been tested for version 2.0.0.
-
-
-
- **Do not** add the plugin as a Git submodule. Git submodules are not supported on the platform. Refer to the [Git guide](/guides/git/faq-git) for more information.
-
-
-
-1. Rename the extracted folder to remove the version number. For example:
-
- ```bash{promptUser: user}
- mv S3-Uploads-2.0.0/ S3-Uploads
- ```
-
-1. Create and/or copy your **Access Key ID** and **Secret Access Key** from the **My security credentials** section of your AWS account to a text editor on your local computer.
-
-
-
- Consider creating a unique user with limited permissions covering this S3 bucket to authenticate the plugin as a standard security measure.
-
-
-
-1. Add the credentials to `wp-config.php`, as described in the plugin's [README](https://github.com/humanmade/S3-Uploads#getting-set-up) file. For increased security, we recommend using [Pantheon Secrets](/guides/secrets) to store and retrieve these credentials securely.
-
-1. Commit and push the new plugin and your `wp-config.php` file updates to the Dev environment, then switch to SFTP mode and activate the plugin:
-
- ```bash{promptUser: user}
- terminus wp $site.dev plugin activate S3-Uploads
- ```
-
-1. Use WP-CLI to verify your AWS setup.
-
- ```bash{promptUser: user}
- terminus wp $site.dev s3-uploads verify
- ```
-
-#### Migrate existing media with S3 Uploads and WP-CLI
-
-You can migrate existing media files to S3 with the following command:
-
-```bash{promptUser: user}
-terminus wp $site.dev -- s3-uploads migrate-attachments
-```
-
-Optionally, add the `--delete-local` flag to remove the local copies of the media files.
-
-This command will also provide a search/replace command for your database to update references to the newly-migrated files when completed. Note that you must run this on all Pantheon environments (Dev, Test, and Live).
-
-#### Multisite Compatibility
-
-WP Offload Media plugin is supported.
-
-Refer to the [WP Offload Media documentation](https://deliciousbrains.com/wp-offload-media/doc/multisite-per-subsite-bucket-and-custom-domain-settings/) for more information.
-
-#### URL Rewriting
-
-URLs saved in the database use S3's provided URL (for example, https://bucketname.s3.amazonaws.com/uploads/2023/01/image.jpg) by default. You can use [Advanced Global CDN](/guides/agcdn/agcdn-features#domain-masking-and-reverse-proxy) to mask the URLs to match your site's domain for SEO purposes. [Contact sales](https://pantheon.io/contact-sales) if you do not have AGCDN or open a [support ticket](/guides/agcdn/submit-request#submit-a-request) to request help with Domain Masking if you have AGCDN.
-
-#### Additional Configuration
-
-Check out the plugin's [README file](https://github.com/humanmade/S3-Uploads/blob/master/README.md) for information on advanced configuration, such as cache control, URL rewriting, and offline development.
-
### Install and Deploy WP Offload Media
Follow documentation from [DeliciousBrains](https://deliciousbrains.com/wp-offload-media/doc/quick-start-guide) to install and deploy WP Offload Media. No specialized configuration is required for this plugin to run on Pantheon.
diff --git a/source/content/modules-known-issues.md b/source/content/modules-known-issues.md
index 550c89d2cc..692d417133 100644
--- a/source/content/modules-known-issues.md
+++ b/source/content/modules-known-issues.md
@@ -150,8 +150,6 @@ ___
___
-___
-
## [Dynamic Entity Reference](https://www.drupal.org/project/dynamic_entity_reference/issues/2930423)
diff --git a/source/content/partials/dashboard-site-creation-1.md b/source/content/partials/dashboard-site-creation-1.md
index 5878ee9b72..15c31a449d 100644
--- a/source/content/partials/dashboard-site-creation-1.md
+++ b/source/content/partials/dashboard-site-creation-1.md
@@ -20,6 +20,17 @@ reviewed: ""
![Select Drupal version](../../images/create-new-site-cms-drupal-11crop.png)
+
+
+ The above options are available during site creation in the **new dashboard**. The legacy dashboard site creation experience does not match today, but it will be aligned in the future.
+
+ Upgrade today by clicking **Try the New Dashboard**, located in the top right of the legacy dashboard navigation. Or if you prefer not to upgrade, use the following site creation links:
+
+ * [Drupal 11](https://dashboard.pantheon.io/sites/create?upstream_machine_name=drupal-11-composer-managed)
+ * [Drupal 10](https://dashboard.pantheon.io/sites/create?upstream_machine_name=drupal-10-composer-managed)
+
+
+
1. Enter the following information and click **Continue**:
- Sitename
- Select a region for this site.
diff --git a/source/content/partials/ic-upstream-structure.md b/source/content/partials/ic-upstream-structure.md
index 8c4a55384d..b49ead3a3d 100644
--- a/source/content/partials/ic-upstream-structure.md
+++ b/source/content/partials/ic-upstream-structure.md
@@ -16,18 +16,18 @@ code/
├─ composer.json
└─ pantheon.upstream.yml
├─ README.md
-└─ upstream-configuration/ or upstream-config/ for WordPress
+└─ upstream-configuration/
└─ composer.json
└─ web/
└─ sites/ for Drupal
- └─ wp-content/ for WordPress
+ └─ app/ for WordPress (Composer Managed) (plugins, themes, and uploads)
+ └─ wp/ for WordPress (Composer Managed) (core files)
```
- `.gitignore`: Prevents [build artifacts](/guides/integrated-composer#build-and-deploy-terminology) generated by Composer from being committed to the upstream or site code repositories. Note that changing the tracking status of Composer-managed files and directories can result in build failures or lead to unexpected errors.
- `composer.json`: The two different `composer.json` files allows you to customize individual sites without inherent merge conflicts and enables one-click updates.
- Root-level: Site-level customizations.
- - Drupal: `upstream-configuration/` or WordPress: `upstream-config/`:
- - `composer.json`: Composer automatically updates `composer.json` with customizations for the upstream. Avoid manually modifying this file.
+ - `upstream-configuration/`: Composer automatically updates `composer.json` with customizations for the upstream. Avoid manually modifying this file.
- `pantheon.upstream.yml`: The `build_step: true` directive in `pantheon.upstream.yml` enables the build step.
When a site is created, Pantheon runs `composer install`, generates a `composer.lock` file, and commits it back to the site’s code repository. To avoid potential merge conflicts after applying an upstream update, do **not** commit the `composer.lock` file from your upstream root to the upstream repository.
diff --git a/source/content/plugins-known-issues.md b/source/content/plugins-known-issues.md
index 3aa566fe18..8eff92cf10 100644
--- a/source/content/plugins-known-issues.md
+++ b/source/content/plugins-known-issues.md
@@ -11,7 +11,7 @@ cms: [wordpress]
audience: [development]
product: [--]
integration: [--]
-reviewed: "2024-09-06"
+reviewed: "2024-10-18"
---
This page lists WordPress plugins, themes, and functions that may not function as expected or are currently problematic on the Pantheon platform. This is not a comprehensive list (see [other issues](#other-issues)). 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](/guides/support/contact-support/).
@@ -550,6 +550,15 @@ via: 1.1 varnish
___
+## Gravity Forms
+
+
+
+**Issue:** Emails from Gravity Forms submissions have content truncated when using the default PHP mailer and PHP versions 8.0 or 8.1.
+
+**Solution:** This issue stems from a change in how line endings are handled by PHP's mail() function. To resolve, upgrade to PHP 8.2+.
+___
+
## H5P
diff --git a/source/content/supported-drupal.md b/source/content/supported-drupal.md
index 68026b26a9..bbd8962f5f 100644
--- a/source/content/supported-drupal.md
+++ b/source/content/supported-drupal.md
@@ -10,7 +10,7 @@ cms: [drupal]
audience: [development]
product: [--]
integration: [--]
-reviewed: "2024-10-08"
+reviewed: "2024-10-15"
---
The following table indicates availability of the specified Drupal versions, as well as our usage recommendations and our support scope.
@@ -55,6 +55,14 @@ To learn more about migrating from Drupal 7 to the latest version of Drupal, see
Refer to [Manage Drush Versions on Pantheon](/guides/drush/drush-versions/) for information on Drush versions that are compatible with each Drupal version.
+
+
+### Site-local Drush is required for Drupal sites.
+
+Do not remove `drush/drush` from `composer.json`. If it's removed, `terminus drush` commands will fail with errors related to Twig.
+
+
+
## Modules Support
Refer to [Drupal Modules with Known Issues](/modules-known-issues) for a list of known compatibility issues.
diff --git a/source/data/terminusReleases.json b/source/data/terminusReleases.json
index ffc581b722..710d4afc87 100644
--- a/source/data/terminusReleases.json
+++ b/source/data/terminusReleases.json
@@ -23,6 +23,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4KejUT",
@@ -58,6 +59,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -97,6 +99,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4KL64t",
@@ -132,6 +135,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -171,6 +175,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4JjvqR",
@@ -206,6 +211,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -245,6 +251,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4JhOwN",
@@ -280,6 +287,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -319,6 +327,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4JFt08",
@@ -354,6 +363,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -393,6 +403,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4IlqSC",
@@ -428,6 +439,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -467,6 +479,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4Ik1kx",
@@ -502,6 +515,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -541,6 +555,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4IJjKH",
@@ -576,6 +591,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -615,6 +631,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4IJasw",
@@ -650,6 +667,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -689,6 +707,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4H4V8S",
@@ -724,6 +743,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -763,6 +783,7 @@
"events_url": "https:\/\/api.github.com\/users\/stovak\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/stovak\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4H3ahF",
@@ -798,6 +819,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -837,6 +859,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4HVWyf",
@@ -872,6 +895,7 @@
"events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/pantheon-ci-bot\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -911,6 +935,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4GTTvz",
@@ -946,6 +971,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -985,6 +1011,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4GMMwm",
@@ -1020,6 +1047,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1059,6 +1087,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4F3fT8",
@@ -1094,6 +1123,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1133,6 +1163,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4FnIYx",
@@ -1168,6 +1199,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1207,6 +1239,7 @@
"events_url": "https:\/\/api.github.com\/users\/stovak\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/stovak\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4FbTvW",
@@ -1242,6 +1275,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1281,6 +1315,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4FO5EY",
@@ -1316,6 +1351,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1355,6 +1391,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4E6e2E",
@@ -1390,6 +1427,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1429,6 +1467,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4EyD7N",
@@ -1464,6 +1503,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1503,6 +1543,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4EuKVo",
@@ -1538,6 +1579,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1577,6 +1619,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4EeQbu",
@@ -1612,6 +1655,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1651,6 +1695,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4Dwn1Q",
@@ -1686,6 +1731,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1725,6 +1771,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4Dko4v",
@@ -1760,6 +1807,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1799,6 +1847,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4DhTMx",
@@ -1834,6 +1883,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1873,6 +1923,7 @@
"events_url": "https:\/\/api.github.com\/users\/CdrMarks\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/CdrMarks\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4Dg8Xk",
@@ -1908,6 +1959,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -1947,6 +1999,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4Da_yO",
@@ -1982,6 +2035,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -2021,6 +2075,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4DUC9r",
@@ -2056,6 +2111,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -2095,6 +2151,7 @@
"events_url": "https:\/\/api.github.com\/users\/jspellman814\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/jspellman814\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4DT_1A",
@@ -2130,6 +2187,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
@@ -2169,6 +2227,7 @@
"events_url": "https:\/\/api.github.com\/users\/CdrMarks\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/CdrMarks\/received_events",
"type": "User",
+ "user_view_type": "public",
"site_admin": false
},
"node_id": "RE_kwDOAQSNzs4DUBDK",
@@ -2204,6 +2263,7 @@
"events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/events{\/privacy}",
"received_events_url": "https:\/\/api.github.com\/users\/github-actions%5Bbot%5D\/received_events",
"type": "Bot",
+ "user_view_type": "public",
"site_admin": false
},
"content_type": "application\/octet-stream",
diff --git a/source/images/wordpress-configurations/05-pantheon-page-cache-admin.png b/source/images/wordpress-configurations/05-pantheon-page-cache-admin.png
new file mode 100644
index 0000000000..a8bc664f7a
Binary files /dev/null and b/source/images/wordpress-configurations/05-pantheon-page-cache-admin.png differ
diff --git a/source/images/wordpress-configurations/08-git-updater-additions.png b/source/images/wordpress-configurations/08-git-updater-additions.png
new file mode 100644
index 0000000000..34e76bfe7b
Binary files /dev/null and b/source/images/wordpress-configurations/08-git-updater-additions.png differ
diff --git a/source/images/wordpress-configurations/08-git-updater-admin.png b/source/images/wordpress-configurations/08-git-updater-admin.png
new file mode 100644
index 0000000000..b13629327b
Binary files /dev/null and b/source/images/wordpress-configurations/08-git-updater-admin.png differ
diff --git a/source/images/wordpress-configurations/08-git-updater-api-addons.png b/source/images/wordpress-configurations/08-git-updater-api-addons.png
new file mode 100644
index 0000000000..fb06625db7
Binary files /dev/null and b/source/images/wordpress-configurations/08-git-updater-api-addons.png differ
diff --git a/source/images/wordpress-configurations/08-git-updater-install-plugin.png b/source/images/wordpress-configurations/08-git-updater-install-plugin.png
new file mode 100644
index 0000000000..74836c47b3
Binary files /dev/null and b/source/images/wordpress-configurations/08-git-updater-install-plugin.png differ
diff --git a/source/releasenotes/2024-10-16-new-relic-agent.md b/source/releasenotes/2024-10-16-new-relic-agent.md
new file mode 100644
index 0000000000..2f0d47f33d
--- /dev/null
+++ b/source/releasenotes/2024-10-16-new-relic-agent.md
@@ -0,0 +1,13 @@
+---
+title: New Relic PHP agent v11.2.0.15 now available
+published_date: "2024-10-16"
+categories: [infrastructure, performance, tools-apis]
+---
+
+The New Relic PHP agent has been updated to the latest version, v11.2.0.15, for all eligible versions of PHP. Support for PHP 7.0 and 7.1 was removed in version 11.0, so the New Relic PHP agent for those versions remains at v10.22.0.12.
+
+This update brings several enhancements and fixes compared to the previous version, including support for Drupal 11. Note, New Relic agent 11.2 introduces information collection for Composer packages, but this is not yet enabled on Pantheon.
+
+For a detailed list of all changes and improvements, see the [complete New Relic PHP agent changelog](https://docs.newrelic.com/docs/release-notes/agent-release-notes/php-release-notes/).
+
+Learn how [New Relic's real-time performance monitoring](/guides/new-relic) can help you with metrics and reports on your Pantheon web applications.
diff --git a/source/releasenotes/2024-10-18-gravityforms-bug-fix.md b/source/releasenotes/2024-10-18-gravityforms-bug-fix.md
new file mode 100644
index 0000000000..6acc6323e0
--- /dev/null
+++ b/source/releasenotes/2024-10-18-gravityforms-bug-fix.md
@@ -0,0 +1,14 @@
+---
+title: Resolved bug affecting form email content
+published_date: "2024-10-18"
+categories: [infrastructure]
+---
+
+Some customers have reported that emails generated from form plugins, such as Gravity Forms or Contact Form 7, have content truncated after upgrading their site to PHP 8. A fix has been applied to PHP 8.2 and above. Affected sites can resolve this issue by [upgrading their PHP version](/guides/php/php-versions) to 8.2 or 8.3.
+
+**Important PHP version information**
+
+* PHP 8.0 reached End-of-Life on November 26, 2023.
+* PHP 8.1 is now receiving security-only updates and will reach End-of-Life in December 2025.
+
+For the best performance and security, Pantheon recommends running PHP 8.2 and above.
diff --git a/source/scripts/collect-logs-rsync.sh.txt b/source/scripts/collect-logs-rsync.sh.txt
index bcac37637f..5b0992966d 100644
--- a/source/scripts/collect-logs-rsync.sh.txt
+++ b/source/scripts/collect-logs-rsync.sh.txt
@@ -15,7 +15,7 @@ CLEANUP_AGGREGATE_DIR=false
if [ $COLLECT_LOGS == true ]; then
-echo 'COLLECT_LOGS set to $COLLECT_LOGS. Beginning the process...'
+echo "COLLECT_LOGS set to $COLLECT_LOGS. Beginning the process..."
for app_server in $(dig +short -4 appserver.$ENV.$SITE_UUID.drush.in);
do
rsync -rlvz --size-only --ipv4 --progress -e "ssh -p 2222" "$ENV.$SITE_UUID@$app_server:logs" "app_server_$app_server"
@@ -31,7 +31,7 @@ echo 'skipping the collection of logs..'
fi
if [ $AGGREGATE_NGINX == true ]; then
-echo 'AGGREGATE_NGINX set to $AGGREGATE_NGINX. Starting the process of combining nginx-access logs...'
+echo "AGGREGATE_NGINX set to $AGGREGATE_NGINX. Starting the process of combining nginx-access logs..."
mkdir aggregate-logs
for d in $(ls -d app*/logs/nginx); do
@@ -63,6 +63,6 @@ echo "AGGREGATE_NGINX set to $AGGREGATE_NGINX. So we're done."
fi
if [ $CLEANUP_AGGREGATE_DIR == true ]; then
-echo 'CLEANUP_AGGREGATE_DIR set to $CLEANUP_AGGREGATE_DIR. Cleaning up the aggregate-logs directory'
+echo "CLEANUP_AGGREGATE_DIR set to $CLEANUP_AGGREGATE_DIR. Cleaning up the aggregate-logs directory"
find ./aggregate-logs/ -name 'nginx-access*' -print -exec rm {} \;
-fi
\ No newline at end of file
+fi
diff --git a/src/layout/header/index.js b/src/layout/header/index.js
index 134e29f2ea..ca98984c68 100644
--- a/src/layout/header/index.js
+++ b/src/layout/header/index.js
@@ -127,7 +127,7 @@ const Header = ({ page }) => (
Skip to main content
-
+ Pantheon Home}>