Files
wordpress-theme-aksrt/inc/modules/widgets-register.php
T

133 lines
3.8 KiB
PHP

<?php
/**
* Widget registration and placement rules.
*
* @package AKSRT
*/
defined('ABSPATH') || exit;
require_once AKSRT_DIR . '/inc/modules/widget-areas.php';
/**
* Register custom widgets.
*/
function aksrt_unregister_default_widgets(): void {
unregister_widget('WP_Widget_RSS');
unregister_widget('WP_Widget_Recent_Posts');
unregister_widget('WP_Widget_Recent_Comments');
unregister_widget('WP_Widget_Pages');
unregister_widget('WP_Widget_Search');
unregister_widget('WP_Widget_Calendar');
unregister_widget('WP_Nav_Menu_Widget');
}
add_action('widgets_init', 'aksrt_unregister_default_widgets', 1);
function aksrt_register_widgets() {
register_widget('\AKSRT\Widgets\CategoriesWidget');
register_widget('\AKSRT\Widgets\TagCloudWidget');
register_widget('\AKSRT\Widgets\HotPostsWidget');
register_widget('\AKSRT\Widgets\TabPostsWidget');
register_widget('\AKSRT\Widgets\CategoryBlockWidget');
register_widget('\AKSRT\Widgets\CategoryTabsWidget');
register_widget('\AKSRT\Widgets\CategoryRecommendWidget');
// 第一批通用 widget
register_widget('\AKSRT\Widgets\SearchWidget');
register_widget('\AKSRT\Widgets\NoticeWidget');
register_widget('\AKSRT\Widgets\RecentCommentsWidget');
register_widget('\AKSRT\Widgets\IconCardsWidget');
register_widget('\AKSRT\Widgets\ButtonsWidget');
// 公告跑马灯
register_widget('\AKSRT\Widgets\WidgetAnnouncement');
// 用户卡片
register_widget('\AKSRT\Widgets\WidgetUserCard');
// 图文封面卡片
register_widget('\AKSRT\Widgets\WidgetCoverCards');
// 视频播放器
register_widget('\AKSRT\Widgets\WidgetVideoPlayer');
// 一言轮播
register_widget('\AKSRT\Widgets\WidgetYiyan');
// 幻灯片
register_widget('\AKSRT\Widgets\WidgetSlider');
// 其余通用小工具
register_widget('\AKSRT\Widgets\WidgetIframe');
register_widget('\AKSRT\Widgets\WidgetComboInfo');
register_widget('\AKSRT\Widgets\WidgetTextTitle');
register_widget('\AKSRT\Widgets\WidgetTermCards');
register_widget('\AKSRT\Widgets\WidgetPostPayBox');
register_widget('\AKSRT\Widgets\WidgetAuthorCard');
register_widget('\AKSRT\Widgets\WidgetOnelinePosts');
register_widget('\AKSRT\Widgets\WidgetMainPosts');
register_widget('\AKSRT\Widgets\WidgetTermAggregation');
register_widget('\AKSRT\Widgets\WidgetIconCoverCards');
}
add_action('widgets_init', 'aksrt_register_widgets');
/**
* Register a block editor collection for AKSRT widgets.
*/
add_action('enqueue_block_editor_assets', function () {
$screen = get_current_screen();
if (!$screen || $screen->id !== 'widgets') {
return;
}
wp_add_inline_script('wp-blocks', '
document.addEventListener("DOMContentLoaded", function() {
if (typeof wp !== "undefined" && wp.blocks && wp.blocks.registerBlockCollection) {
wp.blocks.registerBlockCollection("aksrt", {
title: "AKSRT 主题小工具",
icon: undefined
});
}
});
');
});
/**
* Assign AKSRT widgets to the AKSRT block category in the widgets editor.
*
* @param array<string, mixed> $metadata Block metadata.
* @return array<string, mixed>
*/
add_filter('block_type_metadata', function ($metadata) {
$aksrt_widgets = [
'aksrt_categories',
'aksrt_tag_cloud',
];
if (!empty($metadata['name']) && in_array($metadata['name'], $aksrt_widgets, true)) {
$metadata['category'] = 'aksrt';
}
return $metadata;
});
/**
* Show widget placement hints in the admin form.
*/
add_action('in_widget_form', function (WP_Widget $widget): void {
$map = [
'aksrt_categories' => 'sidebar',
'aksrt_tag_cloud' => 'sidebar',
'aksrt_hot_posts' => 'sidebar',
'aksrt_tab_posts' => 'hybrid',
'aksrt_category_block' => 'hybrid',
'aksrt_category_tabs' => 'hybrid',
'aksrt_category_recommend' => 'homepage',
];
$scope = $map[$widget->id_base] ?? '';
if ($scope !== '') {
aksrt_widget_render_location_help($scope);
}
}, 10, 1);