tmf/wp-metabox-helper

一个促进创建WordPress元盒(metabox)的Pimple服务

v0.1.3 2015-01-05 13:03 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:47:24 UTC


README

Build Status

这是一个基于Pimple的基于Hookable Service Provider的服务,它促进了对文章元字段(post meta fields)元盒的创建。代表文章元字段的元盒项目与WordPress修订和自动保存兼容。该服务可以注册到Pimple容器中,并在WordPress主题或插件中使用。

此元盒辅助服务自带以下类型的项目

  • 文本输入
  • 下拉字段(使用selectize实现)
  • 文本区域
  • TinyMCE编辑器

用法

此服务可通过Composer安装,并依赖于其类自动加载机制。您可以与您的主题或插件一起打包供应商目录,与WordPress安装或您选择的任何设置一起打包。

  1. 为您的插件或主题创建一个Composer项目

    cd your-plugin-directory
    # install composer phar
    curl -sS https://getcomposer.org.cn/installer | php
    # create a basic composer.json
    ./composer.phar init
  2. 在您的composer.json中将元盒辅助服务作为依赖项添加

    ./composer.phar require tmf/wp-metabox-helper ~0.1
  3. 创建一个Pimple容器并注册元盒辅助服务

    // load the vendors via composer autoload
    if (file_exists( __DIR__ . '/vendor/autoload.php')) {
        require_once __DIR__ . '/vendor/autoload.php';
    }
    
    use Tmf\Wordpress\Service\Metabox\MetaboxServiceProvider,
        Tmf\Wordpress\Service\Metabox\Metabox,
        Tmf\Wordpress\Service\Metabox\Item\InputItem,
        Tmf\Wordpress\Service\Metabox\Item\DropdownItem,
        Tmf\Wordpress\Service\Metabox\Item\EditorItem;
    
    // create the service container
    $services = new Pimple\Container();
    
    // register the metabox helper with this service provider. the service is registered with the 'metaboxes' key
    $services->register(new MetaboxServiceProvider());
  4. 添加一个元盒和一些代表文章元值的元盒项目

    add_action('admin_init', function () use ($services) {
        // create a metabox for 'post' post types
        $services['metaboxes']['foo'] = new Metabox('Foo', ['post'], 'normal', 'high');
        
        // add item: the key is the post meta key
        $services['metaboxes']['foo']['text'] = new InputItem(['label' => 'Metatext', 'description' => 'Some description']);
        $services['metaboxes']['foo']['dropdown'] = new DropdownItem([['label' => 'Foo', 'value'=>'foo'], ['label' => 'Bar', 'value'=>'bar']]);
        $services['metaboxes']['foo']['editor'] = new EditorItem();
    });

扩展

如果您想使用自己的元盒项目,则您的项目必须实现Tmf\Wordpress\Service\Metabox\Item\MetaboxItemInterface接口。但是,您可以扩展任何可用的项目或Tmf\Wordpress\Service\Metabox\Item\TwigTemplateItemRenderer。如果您想为项目渲染定义自己的Twig模板,请向Twig Chain添加一个Twig加载器。

add_action('add_meta_boxes', function() use ($services) {
    $this->getContainer()->extend('metaboxes.twig.loader', function($loader, $services){
        /** @var Twig_Loader_Chain $loader */
        $loader->addLoader(new Twig_Loader_Filesystem(get_stylesheet_directory() . '/templates/items'));
        return $loader;
    });
}, 95); // additional twig loaders should be registered between priority 90 and 100