pammel / simple-wordpress-cms
将 WordPress 作为 CMS 使用,并将生成的页面嵌入现有的 PHP 项目中,例如 Laravel 或 Symfony
v1.1.1
2021-06-21 12:21 UTC
Requires
- php: >=7.3.0
- symfony/dom-crawler: *
README
用例
您有一个现有的 PHP 项目,并希望将 WordPress 作为特定页面的 CMS 使用。您只需要 WordPress 网站的页面内容,因为页眉、页脚、导航等已经在您的网站上存在。
这就是 Simple-Wordpress-CMS 的概念
- 它从 WordPress 页面获取内容和设计,并将其嵌入到您的 PHP 网站中。
- 您现有网站的设计不受影响(例如,页眉和页脚)。这是通过使用 Shadow DOM 封装 CSS 来实现的。
- 链接和 URL 会自动修复。 (SEO)元标签也是如此。除了图像 URL 之外,它们保持不变,因为图像存储在 WordPress 服务器上。
- 不论 WordPress 安装在何处,它都可以是任何具有不同 URL 的外部服务器。
安装
$ composer require pammel/simple-wordpress-cms
快速入门
- 您已安装 WordPress 并已创建一个页面。URL 例如 https://my-wordpress.com/wp/my-first-page
- 在您的 PHP 项目中,WordPress 页面可通过 URL https://my-php-project.com/wp/ 访问
使用此代码将 WordPress 页面嵌入到您的 PHP 项目中
<?php use pammel\SimpleWordpressCms\Config; use pammel\SimpleWordpressCms\Client; $config = (new Config()) ->setWordpressUrl('https://my-wordpress.com') ->setProjectUrl('https://my-php-project.com/wp') ->setCssFolderLocal('/var/www/my-php-project/public/css') ->setCssFolderPublicUrl('/css') ; $page = (new Client($config))->getPage('my-first-page'); ?> <html> <head> <!-- Your existing html-head, which probably already has some head-tags in it. For example: <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> --> <? echo $page->getHtmlHead() ?> </head> <body> <header> <!-- Your existing header and navigation --> </header> <?php echo $page->getHtmlBody() ?> <footer> <!-- Your existing footer --> </footer> </body> </html>
功能
更多功能请参阅
缓存
强烈建议缓存页面对象,因为解析 WordPress 页面需要几秒钟。以下是一个使用 Laravel 的示例
<?php use Illuminate\Support\Facades\Cache; use pammel\SimpleWordpressCms\Client; use pammel\SimpleWordpressCms\Config; $slug = 'my-first-page'; $cacheKey = md5('wordpress:' . $slug); $page = Cache::remember($cacheKey, 3600, function() use($slug){ $config = (new Config()) ->setWordpressUrl('https://my-wordpress.com') ->setProjectUrl('https://my-php-project.com/wp') ->setCssFolderLocal('/var/www/my-php-project/public/css') ->setCssFolderPublicUrl('/css') ; return (new Client($config))->getPage($slug)->preprocess(); });
故障排除
- 不要使用依赖于 JavaScript 的 WordPress 主题,特别是用于渲染的。
- 我推荐使用轻量级主题,例如 https://generatepress.com。它不使用 JavaScript,并且不会与短代码产生问题。
- 如果您的页面中没有解码的 "短代码",例如 [vc_column_text]Hello World[/vc_column_text],则必须编辑 WordPress 主题的 function.php 文件,并在文件末尾添加类似以下内容
# wp-content\themes\<your-theme>\function.php ... /** * Modify REST API content for pages to force * shortcodes to render since Visual Composer does not * do this */ add_action( 'rest_api_init', function () { register_rest_field( 'page', 'content', array( 'get_callback' => 'compasshb_do_shortcodes', 'update_callback' => null, 'schema' => null, ) ); }); function compasshb_do_shortcodes( $object, $field_name, $request ) { WPBMap::addAllMappedShortcodes(); // This does all the work global $post; $post = get_post ($object['id']); $output['rendered'] = apply_filters( 'the_content', $post->post_content ); // EDIT: add custom CSS to $output: $output[ 'yb_wpb_post_custom_css' ] = get_post_meta( $object[ 'id' ], '_wpb_post_custom_css', true); return $output; }