dotgenius/mixup-wp

WordPress 插件的基础结构

dev-main 2024-07-22 17:20 UTC

This package is auto-updated.

Last update: 2024-09-22 17:44:42 UTC


README

PHP WordPress

MixUp 的创建是为了简化在基于 WordPress 的项目中编写和组织类及其相关脚本。
利用 OOP 的最佳实践,项目的一个主要支柱是提供一个可测试和与软件工程标准一致的项目结构。

📑 目录

💻 先决条件

在开始之前,请确保您已满足以下要求

  • 已安装 PHP v7.4+
  • 已安装 WordPress
  • 根据指南在该文件中配置了 composer.json

📂 安装

要安装 MixUp,请按照以下步骤操作

1 - 访问您的 WordPress 插件/主题文件夹并运行以下命令

cd wp-content/plugins/meu-plugin
composer install upflex/mixup

2 - 访问 WordPress 控制面板并检查插件/主题是否已启用。

⚙️ 配置

启用后,库将准备好在您的主题和插件中使用。
基本 functions.phpmeu-plugin.php 文件示例

<?php
use UPFlex\MixUp\Core\Base;
use UPFlex\MixUp\Core\Instance\Create;

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

# Admin
Create::run(
    'BaseWp\Admin', # Namespace para instância automática das classes
    Base::class, # Classe base
    [], # Parâmetros adicionais
    get_stylesheet_directory(__FILE__) # Local do arquivo composer.json 
);

请记得在您的主题和插件的 composer.json 文件中添加自动加载参数

"autoload": {
    "psr-4": {
      "TemaWp\\Admin\\": "admin/classes/",
      "TemaWp\\Front\\": "front/classes/"
    }
  }

注意: Instance\Create 使用 composer.json 中的参数进行自动实例化。

🗺️ 示例

以下是一些使用示例的简要列表

动作/过滤:创建具有自动实例化的新动作/过滤。

<?php

namespace BaseWp\Front;

use UPFlex\MixUp\Core\Base;

class Assets extends Base
{
    public function __construct()
    {
        add_action('wp_enqueue_scripts', [self::class, 'styles']);
        add_filter('meu_plugin_priority', [self::class, 'getPriority']);
    }

    public static function getPriority() : int
    {
       return 10;
    }
    
    public static function styles()
    {
        wp_enqueue_style('meu_plugin', 'style.css');
    }
}

字段清理:清理 GET/POST 参数。

<?php

namespace BaseWp\Front;

use UPFlex\MixUp\Core\Base;
use UPFlex\MixUp\Utils\Fields\Sanitize;

class Contact extends Base
{
    use Sanitize;

    public function __construct()
    {
        add_action('wp_ajax_meu_plugin_send_message', [self::class, 'send']);
        add_action('wp_ajax_nopriv_meu_plugin_send_message', [self::class, 'send']);
    }

    public function send() 
    {
        $fields = self::getFields('get'); # Recupera campos $_GET

        if(!empty($fields['my_email'])) {
            return wp_send_json_success();
        }

        return wp_send_json_error();
    }
    
    # Método obrigatório    
    protected static function setFields(): array
    {
        # Informa os campos e seus tipos
        return [
           'name',
           'my_email' => 'email',
        ];
   }
}

PostType:创建新的帖子类型。

<?php

namespace BaseWp\Admin;

use UPFlex\MixUp\Core\Parent\PostType;

class Events extends PostType
{
    protected static string $name = 'events';

    public function __construct()
    {
        self::setIcon('dashicons-groups');
        self::setPlural('Eventos');
        self::setSingular('Evento');
        self::setSlug('eventos');
        self::setArgs([]); # Opcional

        add_action('init', [self::class, 'register']);
    }
}

短代码:创建新的短代码。

<?php

namespace BaseWp\Admin;

use UPFlex\MixUp\Core\Parent\Shortcode;

class ListEvents extends Shortcode
{    
    public function __construct()
    {
        self::setTag('meu_plugin_list_events');
        self::setCallback([self::class, 'render']);
    }
    
    public static function render()
    {
    }
}

分类法:创建新的分类法。

<?php

namespace BaseWp\Admin;

use UPFlex\MixUp\Core\Parent\Taxonomy;

class EventTypes extends Taxonomy
{
    protected static string $name = 'event_types';

    public function __construct()
    {
        self::setPlural('Tipos');
        self::setSingular('Tipo');
        self::setSlug('tipos-de-evento');
        self::setSlug('eventos');
        self::setPostTypes([Events::getName()]); # Pode ser uma string

        add_action('init', [self::class, 'register']);
    }
}

字段验证:验证和清理 GET/POST 参数。

<?php

namespace BaseWp\Front;

use UPFlex\MixUp\Core\Base;
use UPFlex\MixUp\Utils\Fields\Validate;

class Contact extends Base
{
    use Validate;

    public function __construct()
    {
        add_action('wp_ajax_meu_plugin_send_message', [self::class, 'send']);
        add_action('wp_ajax_nopriv_meu_plugin_send_message', [self::class, 'send']);
    }

    public function send()
    {
        $fields = self::getFieldsValidated('get'); # Recupera campos $_GET
        $validate = $fields['success'] ?? true;

        if($validate) {
            return wp_send_json_success();
        }

        return wp_send_json_error();
    }
    
    # Método obrigatório
    protected static function setFields(): array
    {
        # Informa os campos e validações necessárias
        return [
           'name' => 'required|min:1|max:20',
           'email' => 'required',
        ];
   }
}

📫 贡献

要为该项目做出贡献,请按照以下步骤操作

  1. 克隆此存储库。
  2. 创建一个分支: git checkout -b <nome_branch>
  3. 进行更改并提交: git commit -m '<mensagem_commit>'
  4. 将更改推送到原始分支: git push origin <nome_branch>
  5. 创建拉取请求。

作为替代,请参阅 GitHub 文档中有关 如何创建拉取请求 的说明。

🎓 贡献技术信息

该插件包含一些组件和结构,用于在类中使用。以下是一个简要列表

核心:是插件主要结构的一部分的类和接口。

  • Base:负责自动实例化子类的类。

  • Instance:是负责自动实例化(在 Base 类中预定义)的类。

  • Create:负责创建类的实例。

  • Finder:负责定位在主题/插件主文件中定义的类,并使用 composer.json 文件索引。

  • 接口:是负责预定义使用它们的类的接口。

  • IParent:负责预定义创建自定义帖子类型和分类法的类。

  • Parent:是组织 WordPress 原生功能的类。

  • PostType:负责创建自定义帖子类型。

  • 短码:负责创建短码。

  • 分类法:负责创建分类法。

实用工具:是您可以添加到类中以更好地利用和可读性代码的特质。

  • 字段:负责处理和使用字段。

  • 净化:负责根据定义对GET和POST参数进行净化。

     protected static function setFields(): array
    
  • 验证:负责验证字段,如方法定义。

     protected static function setFields(): array
    
  • 电子邮件:负责定义模板和发送电子邮件。

  • 分组类型:负责定义在分类法和自定义帖子类型中的使用。以下方法必须始终添加到类中

      public static function register(): void
    
  • 消息:负责定义发送消息,同时发送电子邮件。以下方法必须始终添加到类中

       protected static function send(): array
    
  • 响应:负责向用户或其他类返回信息。

  • 模板部分:负责在插件中创建模板部分,遵循主题中内置的get_template_parts()想法。

😄 成为贡献者之一

想加入这个项目吗?请遵循上面的贡献指南。

⬆  返回顶部