danlapteacru / facetwp-builder
高级 FacetWP Builder,用于构建分面和模板。
Requires
- php: ^8.1
- itinerisltd/itineris-wp-coding-standards: ^1.0
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/)
最低要求
- 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', ])
如果您不指定 query
或 query_obj
键,您可以使用 setPostType
和 setPostsPerPage
方法来定义 post_type
和 posts_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 Builder 由 Dan Lapteacru 创建。
完整的贡献者列表可以在 这里 找到。
许可证
FacetWP Builder 在 MIT 许可证 下发布。