danlapteacru/facetwp-builder

高级 FacetWP Builder,用于构建分面和模板。

0.1.0 2023-08-02 12:59 UTC

This package is auto-updated.

Last update: 2024-10-01 00:17:10 UTC


README

使用 PHP 创建、注册和重用 FacetWP 插件的分面/模板,并将它们保存在您的源代码仓库中。有关通过 PHP 注册 FacetWP 分面和模板的更多信息,请参阅:[分面文档](https://facetwp.com/help-center/developers/hooks/advanced-hooks/facetwp_facets/) 和 [模板文档](https://facetwp.com/help-center/developers/hooks/advanced-hooks/facetwp_templates/)

Packagist Version PHP from Packagist Packagist Downloads GitHub License Hire Me

最低要求

  • PHP v8.1
  • WordPress v6.1
  • FacetWP v4.0

安装

composer require danlapteacru/facetwp-builder

如果您的项目没有使用 composer,您可以使用 autoload.php 文件。

使用 Builder 添加/删除 FacetWP 分面和模板

目录

分面类型

您可以在官方 FacetWP 文档中找到所有可用分面的完整参考。

自动完成

$builder
    ->addAutocomplete('autocomplete', [
        'label' => 'Autocomplete',
        'source' => 'post_title',
        'placeholder' => 'Placeholder',
  ]);

官方文档

复选框

$builder
    ->addCheckbox('checkbox', [
        'label' => 'Categories',
        'source' => 'tax/category',
        'parent_term' => '',
        'hierarchical' => 'no',
        'show_expanded' => 'no',
        'ghosts' => 'no',
        'preserve_ghosts' => 'no',
        'operator' => 'and',
        'orderby' => 'count',
        'count' => '10',
        'soft_limit' => '5',
  ]);

官方文档

日期范围

$builder
    ->addDateRange('date_range', [
        'label' => 'Date Range',
        'source' => 'post_type',
        'compare_type' => '',
        'fields' => 'both',
        'format' => '',
  ]);

官方文档

下拉菜单

$builder
    ->addDropdown('dropdown', [
        'label' => 'Dropdown',
        'source' => 'post_type',
        'label_any' => 'Any',
        'parent_term' => '',
        'modifier_type' => 'off',
        'modifier_values' => '',
        'hierarchical' => 'no',
        'orderby' => 'count',
        'count' => '10',
  ]);

官方文档

fSelect

$builder
    ->addFselect('fselect', [
        'label' => 'fSelect',
        'source' => 'post_type',
        'label_any' => 'Any',
        'parent_term' => '',
        'modifier_type' => 'off',
        'modifier_values' => '',
        'hierarchical' => 'no',
        'multiple' => 'no',
        'ghosts' => 'no',
        'preserve_ghosts' => 'no',
        'operator' => 'and',
        'orderby' => 'count',
        'count' => '10',
  ]);

官方文档

层级

$builder
    ->addHierarchy('hierarchy', [
        'label' => 'Hierarchy',
        'source' => 'post_type',
        'label_any' => 'Any',
        'modifier_type' => 'off',
        'modifier_values' => '',
        'orderby' => 'count',
        'soft_limit' => '5',
  ]);

官方文档

数字范围

$builder
    ->addNumberRange('number_range', [
        'label' => 'Number Range',
        'source' => 'post_type',
        'compare_type' => '',
        'fields' => 'both',
  ]);

官方文档

分页器

$builder
    ->addPager('pager', [
        'label' => 'Pager',
        'pager_type' => 'numbers',
        'inner_size' => '2',
        'dots_label' => '',
        'prev_label' => '« Prev',
        'next_label' => 'Next »',
        'count_text_plural' => '[lower] - [upper] of [total] results',
        'count_text_singular' => '1 result',
        'count_text_none' => 'No results',
        'load_more_text' => 'Load more',
        'loading_text' => 'Loading...',
        'default_label' => 'Per page',
        'per_page_options' => '10, 25, 50, 100',
  ]);

官方文档

邻近度

$builder
    ->addProximity('proximity', [
        'label' => 'Proximity',
        'source' => 'post_type',
        'unit' => 'mi',
        'radius_ui' => 'dropdown',
        'radius_options' => '10, 25, 50, 100, 250',
        'radius_min' => '1',
        'radius_max' => '50',
        'radius_default' => '25',
        'placeholder' => '',
  ]);

官方文档

单选按钮

$builder
    ->addRadio('radio', [
        'label' => 'Radio',
        'source' => 'post_type',
        'label_any' => 'Any',
        'parent_term' => '',
        'modifier_type' => 'off',
        'modifier_values' => '',
        'ghosts' => 'no',
        'preserve_ghosts' => 'no',
        'orderby' => 'count',
        'count' => '10',
  ]);

官方文档

重置

$builder
    ->addReset('reset', [
        'label' => 'Reset',
        'reset_ui' => 'button',
        'reset_text' => 'Reset',
        'reset_mode' => 'off',
        'auto_hide' => 'no',
        'reset_facets' => [],
  ]);

官方文档

搜索

$builder
    ->addSearch('search', [
        'label' => 'Search',
        'search_engine' => '',
        'placeholder' => '',
        'auto_refresh' => 'no',
  ]);

官方文档

滑块

$builder
    ->addSlider('slider', [
        'label' => 'Slider',
        'source' => 'post_type',
        'compare_type' => '',
        'prefix' => '',
        'suffix' => '',
        'reset_text' => 'Reset',
        'format' => '0,0',
        'step' => '1',
  ]);

官方文档

排序

$builder
    ->addSort('sort', [
        'label' => 'Sort',
        'type' => 'sort',
        'default_label' => 'Sort by',
        'sort_options' => [
            [
                'label' => 'post_title',
                'name' => 'post_title',
                'orderby' => [
                    [
                        'key' => 'title',
                        'order' => 'ASC',
                        'type' => 'CHAR',
                    ],
                ],
            ],
        ],
  ]);

官方文档

星级评分

$builder
    ->addRating('star_rating', [
        'label' => 'Star Rating',
        'source' => 'post_type',
  ]);

官方文档

用户选择

$builder
    ->addUserSelections('user_selections', [
        'label' => 'User Selections',
  ]);

待办事项:添加可用选项。

官方文档

快捷函数

如果您不想使用 add 方法的第二个参数,您可以使用以下快捷函数

setName(string $name)
setLabel(string $label)
setSource(string $source)
setOperator(string $operator)
setOrderby(string $orderby)
setCount(int $count)
setHierarchical(bool $hierarchical)
setShowExpanded(bool $show_expanded)
setGhosts(bool $ghosts)
setPreserveGhosts(bool $preserve_ghosts)
setSoftLimit(int $soft_limit)
setLabelAny(string $label_any)
setMultiple(bool $multiple)
setSearchEngine(string $search_engine)
setPlaceholder(string $placeholder)
setAutoRefresh(bool $auto_refresh)
setStep(int $step)
setPrefix(string $prefix)
setSuffix(string $suffix)
setCompareType(string $compare_type)
setFormat(string $format)
setSourceOther(string $source_other)

模板

您可以在 官方 FacetWP 文档 中找到如何使用 PHP 添加模板的完整参考。

添加模板

您可以使用 addTemplate 方法添加模板。

示例

$builder
    ->addTemplate('course', [
        'name' => 'course',
        'label' => 'Course',
        'type' => 'course',
        'query_array' => [
            'post_type' => 'course',
            'post_status' => 'publish',
            'posts_per_page' => 10,
            'orderby' => 'title',
            'order' => 'asc'
        ],
        'query' => '<?php
return [
  \'post_type\' => \'course\',
  \'post_status\' => \'publish\',
  \'posts_per_page\' => 10,
  \'orderby\' => \'title\',
  \'order\' => \'asc\',
];',
        'modes' => [
            'display' => 'visual',
            'query' => 'advanced'
        ],
        '_code' => true
    ],
  ]);

注意! query 键应包含 PHP 代码字符串。如果您更喜欢使用 PHP 数组,请使用 setQuery 辅助函数。

以下是一些用于 addTemplate 方法的可用的声明性快捷函数

$builder
    ->addTemplate('course')
    ->setLabel('Course')
    ->setQuery([
      'post_type' => 'course',
      'post_status' => 'publish',
      'posts_per_page' => 10,
      'orderby' => 'title',
      'order' => 'asc',
    ])
    ->setQueryObj([
      'post_type' => 'course',
    ])
    ->setModes([
      'display' => 'visual',
      'query' => 'advanced',
    ])

如果您不指定 queryquery_obj 键,您可以使用 setPostTypesetPostsPerPage 方法来定义 post_typeposts_per_page 参数。

示例

$builder
    ->addTemplate('course')
    ->setPostType('course')
    ->setPostsPerPage(9)
默认标签

如果未设置 setLabel,或者 addTemplate 参数不包含 label 键,则标签将从模板名称/键生成。

默认模式

如果未设置 setModes,或者 addTemplate 参数不包含 modes 键,则使用默认的 modes

[
    'display' => 'visual',
    'query' => 'advanced',
]

组合自定义/第三方插件分面

您可以使用 addFacet 方法添加自定义/第三方插件分面。

addFacet(string $name, string $type, array $args = [])

示例

$builder
    ->addFacet('myFacetName', 'checkbox', [
      'label' => 'My Facet Label',
    ]);

如果您想使用在 ALLOWED_FACET_TYPES 常量中未定义的分面类型,您可以使用 addAllowedFacetType 方法或 danlapteacru/facetwp-builder/allowed_facet_types 钩子来添加它。

钩子

您可以使用以下钩子修改 FacetWP Builder

danlapteacru/facetwp-builder/allowed_facet_types

您可以使用此钩子向FacetWP Builder添加自定义分面类型。

danlapteacru/facetwp-builder/facets

您可以使用此钩子修改在返回之前的面阵列。

danlapteacru/facetwp-builder/facet_key

您可以使用此钩子修改在检查是否存在分面类型之前使用的分面键。

danlapteacru/facetwp-builder/templates

您可以使用此钩子修改在返回之前模板数组。

示例

目录

添加分面

use DanLapteacru\FacetWpBuilder\FacetsBuilder;

$builder = new FacetsBuilder();
$builder
    ->addSearch('search')
    ->setLabel('Search')
    ->setPlaceholder('Search placeholder')
    ->setAutoRefresh(true)
    ->build();

添加自定义分面

use DanLapteacru\FacetWpBuilder\FacetBuilder;
use DanLapteacru\FacetWpBuilder\Facets\Checkbox;
use DanLapteacru\FacetWpBuilder\FacetsBuilder;

$facet = new FacetBuilder(static::FACET_NAME, Checkbox::TYPE);
$facet
    ->setLabel('Search')
    ->setPlaceholder('Search placeholder')
    ->setAutoRefresh(true);
$facetArray = $facet->build();

FacetsBuilder::addFacetWpHook($facetArray);

添加模板

use DanLapteacru\FacetWpBuilder\TemplatesBuilder;

$builder = new TemplatesBuilder();
$builder
    ->addTemplate('course')
    ->setLabel('Courses')
    ->setQuery([
        'post_type' => 'course',
        'post_status' => 'publish',
        'posts_per_page' => 8,
        'orderby' => 'title',
        'order' => 'ASC',
    ])
    ->build();

致谢

FacetWP BuilderDan Lapteacru 创建。

完整的贡献者列表可以在 这里 找到。

许可证

FacetWP BuilderMIT 许可证 下发布。