133 lines
3.8 KiB
PHP
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);
|