145 lines
5.6 KiB
PHP
145 lines
5.6 KiB
PHP
<?php
|
|
/**
|
|
* Widget registration and placement rules.
|
|
*
|
|
* @package AKSRT
|
|
*/
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
require_once AKSRT_DIR . '/inc/modules/widget-areas.php';
|
|
require_once AKSRT_DIR . '/inc/modules/widget-common.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');
|
|
register_widget('\AKSRT\Widgets\PricingPlansWidget');
|
|
register_widget('\AKSRT\Widgets\TestimonialsWidget');
|
|
register_widget('\AKSRT\Widgets\FaqWidget');
|
|
register_widget('\AKSRT\Widgets\StatsWidget');
|
|
register_widget('\AKSRT\Widgets\HighlightsWidget');
|
|
register_widget('\AKSRT\Widgets\PartnersWidget');
|
|
}
|
|
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',
|
|
'aksrt_hot_posts','aksrt_tab_posts','aksrt_category_block','aksrt_category_tabs','aksrt_category_recommend',
|
|
'aksrt_search','aksrt_notice','aksrt_recent_comments','aksrt_icon_cards','aksrt_buttons','aksrt_announcement','aksrt_user_card','aksrt_cover_cards','aksrt_video_player','aksrt_yiyan','aksrt_slider','aksrt_iframe','aksrt_combo_info','aksrt_text_title','aksrt_term_cards','aksrt_post_pay_box','aksrt_author_card','aksrt_oneline_posts','aksrt_main_posts','aksrt_term_aggregation','aksrt_icon_cover_cards',
|
|
'aksrt_pricing_plans','aksrt_testimonials','aksrt_faq','aksrt_stats','aksrt_highlights','aksrt_partners',
|
|
];
|
|
|
|
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',
|
|
'aksrt_search'=>'sidebar','aksrt_notice'=>'sidebar','aksrt_recent_comments'=>'sidebar','aksrt_icon_cards'=>'hybrid','aksrt_buttons'=>'hybrid','aksrt_announcement'=>'homepage','aksrt_user_card'=>'sidebar','aksrt_cover_cards'=>'homepage','aksrt_video_player'=>'content','aksrt_yiyan'=>'sidebar','aksrt_slider'=>'homepage','aksrt_iframe'=>'content','aksrt_combo_info'=>'homepage','aksrt_text_title'=>'hybrid','aksrt_term_cards'=>'homepage','aksrt_post_pay_box'=>'content','aksrt_author_card'=>'content','aksrt_oneline_posts'=>'sidebar','aksrt_main_posts'=>'homepage','aksrt_term_aggregation'=>'homepage','aksrt_icon_cover_cards'=>'homepage',
|
|
'aksrt_pricing_plans'=>'homepage','aksrt_testimonials'=>'homepage','aksrt_faq'=>'content','aksrt_stats'=>'homepage','aksrt_highlights'=>'homepage','aksrt_partners'=>'homepage',
|
|
];
|
|
|
|
$scope = $map[$widget->id_base] ?? '';
|
|
if ($scope !== '') {
|
|
aksrt_widget_render_location_help($scope);
|
|
}
|
|
}, 10, 1);
|