extremesensio/easywordpressbundle

此包已被废弃且不再维护。未建议替代包。

在 Symfony 3+ 中轻松实现 WordPress

1.1.24 2020-09-16 12:54 UTC

README

1 - 预先条件和依赖

需要 PHP 7.0。
不得使用 PHP 7.1(WPML WordPress 扩展目前不支持此 PHP 版本)。

此包与 symfony 3 一起使用。

composer require extremesensio/easywordpressbundle

2 - 安装 & 使用

2.1 使用命令

在您的 AppKernel.php 中启用此包 new EasyWordpressBundle\EasyWordpressBundle(),

使用 wp-cli 在 web/wp 中安装 WordPress: wp-ci core download --path=project/web/wp
关于 wp-cli 的更多信息:http://wp-cli.org/fr/

您可以使用 easywordpress:install-wordpress 自动(在 docker 内执行)

  • wp-content 复制到 web/content
  • web/wp-content/themes 移动到 app/Resources 并将其符号链接到 web/content/themes

您可以使用 easywordpress:generate:files 自动

  • 创建 web/index.php 文件
  • 创建 web/boot.php 文件
  • 创建 app/config/parameters.php 文件
  • 在根目录创建 .env 文件

对于每个页面模板,您可以使用 easywordpress:generate:templates 生成 wp 主题文件(不要生成 twig 文件)。对于页面帖子类型

use EasyWordpressBundle\Annotation\TemplateName;
use EasyWordpressBundle\Controller\WordpressController;
...

class HomeController extends WordpressController
{
    /**
      * @TemplateName(name="Accueil")
    */
    public function homeAction(Request $request)
    {
        return $this->render(
            'AppBundle:Accueil:index.html.twig',
            [
                'base_dir' => realpath(
                    $this->container
                        ->getParameter('kernel.root_dir').'/..'
                ),
                ...
            ]
        );
    }
}

对于自定义帖子类型

use EasyWordpressBundle\Annotation\CustomPostType;
use EasyWordpressBundle\Controller\WordpressController;
...

class HomeController extends WordpressController
{
    /**
      * @TemplateName(name="customPostType")
    */
    public function homeAction(Request $request)
    {
        return $this->render(
            'AppBundle:Custom:index.html.twig',
            [
                'base_dir' => realpath(
                    $this->container
                        ->getParameter('kernel.root_dir').'/..'
                ),
                ...
            ]
        );
    }
}

生成 app/Resource/themes/mythemename/page-templates/page_accueil.php

2.2 不使用命令

示例文件位于 doc 文件夹中。

按照上述列表操作,并修改 web/.htaccess

2.3 更新一些文件

routing.yml

wordpress:
    resource: "@EasyWordpressBundle/Resources/config/routing.yml"

config_dev.yml

imports:    
    - { resource: parameters.php }

config.yml

easy_wordpress:
    wordpress_directory: '%kernel.root_dir%/../web/wp/'
    controllers_namespace: AppBundle\\Controller
    theme_directory: '%kernel.root_dir%/Resources/themes/mytheme/'
    yoast_title_override: %easywordpressbundle.yoast_title_override%

web/.htaccess

您可以使用 doc/.htaccess.example

functions.php

对于每个主题,您需要在 functions.php 中添加这两行

require_once __DIR__.'/../../../../web/boot.php';
symfony('wordpress.helper')->boot();

配置您的虚拟主机

<Directory /var/www/html/web>
    AllowOverride All
    Require all granted

    <IfModule mod_rewrite.c>
        Options -Indexes
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>
</Directory>

3 - 特性

3.1 使用 EasyWordpress 控制器方法

您必须使用 EasyWordpress 控制器扩展您的控制器

namespace AppBundle\Controller;

use EasyWordpressBundle\Annotation\TemplateName;
use EasyWordpressBundle\Controller\WordpressController;

public function homeAction()
{
    // Get WordPress posts from the current page
    $posts = $this->getPosts();

    // Render in Twig view
    return $this->render(
        ':home:index.html.twig',
        [
            'base_dir' => realpath(
                $this
                    ->container
                    ->getParameter('kernel.root_dir').'/..'
            ),
            'posts' => $posts
        ]
    );
}

3.3 EasyWordpressBundle 服务

  • CustomPostType
  • 瞬态
  • 辅助器
  • 网站地图
  • 导航

3.4 Twig 函数

wp_head

  wp_head

包含 WordPress 头部(样式、脚本、元标签和其他标签)。
更多信息:https://codex.wordpress.org/Plugin_API/Action_Reference/wp_head

wp_footer

  wp_footer

包含 WordPress 底部(脚本标签)。
更多信息:https://codex.wordpress.org/Function_Reference/wp_footer

get_content

wp_nav_menu

  wp_nav_menu(themeLocation, menu, menuClass, menuId, container, containerClass, containerId, echo, wp_page_menu, before, after, linkBefore, linkAfter, depth, walker)

从主题选项外观创建的 WordPress 菜单创建导航。
仅需要 themeLocationmenu 变量。
更多信息:https://developer.wordpress.org/reference/functions/wp_nav_menu/

_e

  _e(text, domain)

显示已翻译的文本。
更多信息:https://developer.wordpress.org/reference/functions/_e/

__

  __(text, domain)

检索文本的翻译。
更多信息:https://developer.wordpress.org/reference/functions/__/

bloginfo

  bloginfo(info)

显示有关当前站点的信息。
更多信息:https://developer.wordpress.org/reference/functions/bloginfo/

get_field

    get_field(selector, (postId), (formatValue))

显示 ACF 字段的內容。
更多信息:https://www.advancedcustomfields.com/resources/get_field/

wp_thumbnail

  wp_thumbnail(id)

从帖子 ID 返回缩略图 URL。

3.5 Twig 过滤器

do_shortcode

    content|do_shortcode

在 html 代码中解释短代码。要显示 html 标签,您必须使用 Twig 过滤器 |raw|purify
有关 purify Twig 过滤器的更多信息:https://github.com/Exercise/HTMLPurifierBundle

3.6 WordPress Yoast SEO 插件

如果您使用 Yoast SEO 插件,您可以覆盖 <head> 中的 <title> 标签内容。您必须启用此功能

  easy_wordpress:
      yoast_title_override: true

祝您使用愉快。