alleyinteractive/wp-theme-migrator

一个用于增量迁移到新WordPress主题的库。

v1.0.0 2023-11-29 20:16 UTC

This package is auto-updated.

Last update: 2024-09-08 20:10:14 UTC


README

Coding Standards Testing Suite

一个支持WordPress中敏捷、增量主题迁移的库。

背景

此库简化了将WordPress站点迁移到新主题的增量方法。

传统的重新设计站点的策略是先构建整个主题,然后在新主题完成时在生产环境中激活。此库使您可以使用Strangler Fig模式逐渐从旧主题迁移到新主题,同时两个主题都安装在生产环境中。

迁移策略的参数通过回调在初始化期间传递给迁移器。迁移器在解析当前请求的早期阶段就解析了查询变量,并将它们传递给每个回调,这样您就可以基于帖子类型、分类法、发布日期、语言、帖子元信息或任何在迁移器运行之前添加的公共查询变量来构建迁移策略。

此外,您可以在查询中定义更多的迁移策略。迁移器是无差别的 - 它只需要知道当前请求是否应该迁移到新主题。因此,您的策略可以引用全局变量、常量、API集成、星期几 - 或者迁移器运行时可以访问的任何值,以确定迁移性。

通过精心设计的回调,您甚至可以在开发期间进行A/B测试重新设计的页面。可以在主题完成之前构建、测试和发布单个内容类型,使您的流程真正具有迭代周期。

版本

此包遵循语义版本控制约定。

路线图

此包处于预发布状态。在第一次发布之前要完成的目标包括

  • 添加功能测试。

安装

需要Composer和PHP >= 8.0。

使用

安装一个新的有效主题。为了有效,它必须存在于/wp-content/themes/目录中,与本地WordPress和PHP版本兼容,并且至少包含一个style.css文件。不要激活新主题。

通过Composer安装此包。

composer require alleyinteractive/wp-theme-migrator

确保将Composer自动加载器加载到您的项目中。

require_once __DIR__ . '/vendor/autoload.php';

在您的项目中初始化迁移器。迁移器在setup_theme钩子上进行其魔术操作,因此必须在之前初始化。在这里,迁移器对象是在plugins_loaded钩子上创建的

/**
* Initialize WP Theme Migrator early.
*/
function init_migrator() {
	try {
		$migrator = new \Alley\WP\Theme_Migrator\Migrator();
		$migrator->init();
	} catch( Exception  $e ) {
		// Do something. The Migrator will throw an Exception when it's
		// initialized with an invalid theme or callback. Be sure to catch
		// the Exception to fatal errors.
	}
}
add_action( 'plugins_loaded', 'init_migrator' );

通过过滤器将新主题的名称和一个或多个回调列表传递给迁移器。如果给定请求应该使用新主题处理,则回调必须返回true。如果提供了多个回调,则迁移器将逐个调用每个回调,直到其中一个返回true。然后,迁移器将加载新主题,并且在该请求上不会调用更多回调。如果提供的所有回调都不返回true,则将加载旧主题。

/**
 * Pass the new theme to WP Theme Migrator.
 */
add_filter( 'wp_theme_migrator_theme', fn() => 'new-theme-slug' );

/**
* Add callbacks for WP Theme Migrator to determine migratability.
*
* @param callable[] $callbacks Array of callbacks.
* @param Migrator   $migrator Migrator instance.
*/
function filter_wp_theme_migrator_callbacks( $context, $migrator) {
	return [
		'a_callback', // This can be any callable.
		'another_callback',
	];
}
add_filter( 'wp_theme_migrator_callbacks', 'filter_wp_theme_migrator_callbacks', 10, 2 );

通过您的回调定义您的迁移策略。

/**
* Callback to manage theme migration.
*
* @param array $query_vars Array of query vars for the current request.
* @return bool Whether to load the new theme.
*/
function a_callback( $query_vars ): bool {
	// Do something to decide if the current request is migratable.
}

一旦迁移了整个站点,激活您的主题,从您的项目中删除此包,并卸载旧主题。

从源代码

要本地工作于此项目,首先将存储库添加到您的项目composer.json

{
	"repositories": [
		{
			"type": "path",
			"url": "../path/to/wp-theme-migrator",
			"options": {
				"symlink": true
			}
		}
	]
}

接下来,将本地开发文件添加到composer.jsonrequire部分

{
	"require": {
		"alleyinteractive/wp-theme-migrator": "@dev"
	}
}

最后,更新Composer以使用本地副本的包

composer update alleyinteractive/wp-theme-migrator --prefer-source

变更日志

此项目保留了一个变更日志

开发流程

请参阅上方的说明,了解从源代码安装的方法。社区欢迎提交拉取请求,并将考虑将其包含在内。版本遵循语义版本控制,按需发货。

贡献

有关如何为这个开源项目做出贡献的说明,请参阅我们的贡献指南

项目结构

这是一个发布到Packagist的Composer包。类使用alleyinteractive/composer-wordpress-autoloader自动加载。它们位于src目录,并遵循标准的WordPress类命名约定。

第三方依赖

依赖关系由Composer管理,包括

  • alleyinteractive/composer-wordpress-autoloader:用于自动加载遵循标准WordPress文件名约定的类。
  • alleyinteractive/alley-coding-standards:用于运行phpcs代码检查。
  • mantle-framework/testkit:用于运行单元测试。
  • symfony/filesystem:用于将文件复制到WordPress测试安装中进行测试。

维护者

Alley logo

贡献者

感谢所有为这个项目做出贡献的人

许可证

本项目根据GNU公共许可证(GPL)第2版或更高版本授权。