franmastromarino/wp-options-orm

这是一个帮助开发者在自己的插件中创建自定义WordPress实体的包。

dev-main 2024-09-18 14:23 UTC

This package is auto-updated.

Last update: 2024-09-18 14:24:31 UTC


README

描述

WP ORM是一个专为WordPress设计的专业对象关系映射器,简化了使用wp_options表来管理实体。它提供了一种有效处理单个和集合实体的方式,非常适合插件设置和简单的插件实体,无需自定义数据库。

WP ORM的主要目标是消除创建自定义数据库或多个wp_options条目的需求,减少与在WordPress中管理此类数据相关的复杂性。

这使得它成为寻找简化且高效处理插件内数据的WordPress开发者的理想解决方案。

WP ORM在需要简单数据管理的情况下表现出色。它特别擅长管理WordPress插件中的设置和其他基本实体。

对于需要更复杂数据结构或高级功能的程序,我们建议使用Symlink ORM,它更适合处理复杂的数据需求。

总之,WP ORM提供了一种开发者友好、高效且简化的方法来管理WordPress数据,是寻求增强其插件开发过程而不增加自定义数据库管理复杂性的开发者的绝佳选择。

主要功能

  • 简单实体管理:轻松创建和管理单个实体。
  • 集合实体处理:轻松处理集合实例。

安装

composer require franmastromarino/wp-options-orm

使用

WP ORM可用于在WordPress中创建和管理实体。以下是一些其实际应用的示例

单个实体

在这个例子中,我们将分享一个插件设置实现的示例。

// Define the PluginSettings entity
namespace YourNamespace\Entities;

use QuadLayers\WP_Orm\Entity\SingleEntity;

class PluginSettings extends SingleEntity
{
    public $feature_enabled = 1;
    public $layout_type = 'grid';
    public $max_items = 10;
    public $post_type = array( 'post', 'page' );
    public $more = array(
            'test1' => true,
            'test2' => true,
            'test3' => false,
    );
    // Additional settings properties...
}
// Model for PluginSettings
namespace YourNamespace\Models;

use YourNamespace\Entities\PluginSettings;
use QuadLayers\WP_Orm\Builder\SingleRepositoryBuilder;

class PluginSettingsModel
{
    protected $repository;

    public function __construct()
    {
        $builder = new SingleRepositoryBuilder();
        $builder->setTable('your_plugin_settings')
        ->setEntity(PluginSettings::class);

        $this->repository = $builder->getRepository();
    }

    public function getSettingsTable()
    {
        return $this->repository->getTable();
    }

    public function getSettings()
    {
        $entity = $this->repository->find();

        if ($entity) {
            return $entity->getProperties();
        } else {
            $admin = new PluginSettings();
            return $admin->getProperties();
        }
    }

    public function deleteSettings()
    {
        return $this->repository->delete();
    }

    public function saveSettings($data)
    {
        $entity = $this->repository->create($data);

        if ($entity) {
            return true;
        }
    }
    // Additional model methods...
}

集合实体

在这个例子中,我们将分享一个插件项目集合实现的示例。

namespace YourNamespace\Entities;

use QuadLayers\WP_Orm\Entity\CollectionEntity;

class PluginItems extends CollectionEntity
{
    public static $primaryKey = 'item_id';
    public $item_id          = 0;
    public $feature_enabled = 1;
    public $layout_type = 'grid';
    public $max_items = 10;
    public $post_type = array( 'post', 'page' );
    public $more = array(
            'test1' => true,
            'test2' => true,
            'test3' => false,
    );
    // Additional settings properties...
}
namespace YourNamespace\Models;

use YourNamespace\Entities\PluginItems;
use QuadLayers\WP_Orm\Builder\CollectionRepositoryBuilder;

class PluginItemsModel
{
    protected static $instance;
    protected $repository;

    private function __construct()
    {

        $builder = ( new CollectionRepositoryBuilder() )
        ->setTable('your_plugin_items')
        ->setEntity(PluginItems::class)
        ->setAutoIncrement(true);

        $this->repository = $builder->getRepository();
    }

    public function getItemsTable()
    {
        return $this->repository->getTable();
    }

    public function getItemDefaults()
    {
        $entity   = new PluginItems();
        $defaults = $entity->getDefaults();
        return $defaults;
    }

    public function getItem(int $item_id)
    {
        $entity = $this->repository->find($item_id);
        if ($entity) {
            return $entity->getProperties();
        }
    }

    public function deleteItem(int $item_id)
    {
        return $this->repository->delete($item_id);
    }

    public function updateItem(int $item_id, array $item)
    {
        $entity = $this->repository->update($item_id, $item);
        if ($entity) {
            return $entity->getProperties();
        }
    }

    public function createItem(array $item)
    {
        if (isset($item['item_id'])) {
            unset($item['item_id']);
        }

        $entity = $this->repository->create($item);

        if ($entity) {
            return $entity->getProperties();
        }
    }

    public function getAllItems()
    {
        $entities = $this->repository->findAll();
        if (! $entities) {
            return;
        }
        $actions = array();
        foreach ($entities as $entity) {
            $actions[] = $entity->getProperties();
        }
        return $actions;
    }

    public function deleteAllItems()
    {
        return $this->repository->deleteAll();
    }

    public static function instance()
    {
        if (! isset(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}