juvo/bricks-custom-query

易于使用的自定义砖块查询

1.0.6 2024-09-27 14:06 UTC

README

您是一名开发者,并希望将自定义查询添加到砖块构建器中?这个包就是为您准备的。从现在起,您可以为循环添加自己的逻辑和功能。您是否想过在一个高度复杂的循环中迭代自定义数据库、外部API或WordPress数据结构?来吧。

功能概述

  • 简单注册自定义查询
  • 查询监控插件自动性能分析
  • 为您的查询添加自定义控件
  • WP Gridbuilder 支持(仅适用于原生WordPress数据类型)
  • 多站点查询(仅适用于原生WordPress数据类型)

安装

要安装此包,您可以使用 composer。在终端中运行以下命令

composer require juvo/bricks-custom-query

您应该尽早启动注册。最佳位置是在您插件的主体文件或主题的 functions.php 中。

add_action('init', function() {
    juvo\Bricks_Custom_Queries\Query_Registry::getInstance();
});

用法

要注册一个简单的查询,您可以使用以下代码片段。第一个参数是查询名称,第二个参数是查询标签,第三个参数是返回回调的回调。

Query_Registry::set(
    'collection_prompts', // Query name
    'Collection Prompts', // Query label
    function(array $args, \Bricks\Query $query_obj, juvo\Bricks_Custom_Queries\Query $query) { // Callback for query args
        return array_merge($args, [
                'post_type' => 'posts',
            ]
        );
    }
);

查询类型

有一个可选的第四个参数,允许您设置查询的类型。如果您查询的内容不是文章,请相应地更改类型。支持的类型作为 PHP 枚举设置。默认类型是 Query_Type::Post

enum Query_Type
{
    case Post;
    case User;
    case Term;
    case Other;
}

如果您不使用原生WordPress数据类型,请选择 Query_Type::Other。有关“其他”查询的更详细指南,请参阅此指南

查询回调

对于原生WordPress数据类型,回调必须返回有效的查询参数。对于自定义数据类型,您需要返回实际数据。对于后者,返回值将不再进一步处理。

查询配置

您可以使用设置函数配置一些查询配置。有关这些的完整文档,请参阅此处:https://github.com/JUVOJustin/bricks-custom-query/wiki/Query-Configs

附加控件

您可以为查询添加附加控件。控件的全列表可以在以下位置找到:https://academy.bricksbuilder.io/topic/controls/ 您不需要设置选项卡。

Query_Registry::set(
    'collection_prompts', // Query name
    'Collection Prompts', // Query label
    function(array $args, \Bricks\Query $query_obj, juvo\Bricks_Custom_Queries\Query $query) { // Callback for query args
        
        // Check setting and apply your logic
        if (!empty($query_obj->settings['return_all'])) {
            $args['posts_per_page'] = -1;
        }
        
        return array_merge($args, [
                'post_type' => 'posts',
            ]
        );
    }
)->set_controls([
    'return_all' => [
        'label' => esc_html('Return all'),
        'type'  => 'checkbox',
    ]
]);