马上注册,结交更多好友,享用更多功能,让你轻松玩转小K网。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
wordpress子比美化-初晨杂志轮博文章显示
亮点✅ 纯代码实现:无需安装任何插件,不增加数据库负担
✅ 自动更新:每次发布新文章,轮播自动显示最新内容
✅ SEO 友好:标准 HTML 结构,图片带 alt 属性,链接可点击
✅ 适配 Zibll:自动继承主题配色(--theme-color),支持深色模式
✅ 性能优化:CDN 加载 Owl Carousel,图片懒加载,不影响页面速度 安装步骤(只需 2 步)第 1 步:创建 MU 插件文件- 通过 FTP 或 宝塔面板/主机文件管理器 进入网站目录
- 找到 /wp-content/ 文件夹
- 创建新文件夹:mu-plugins(如果没有这个文件夹,必须手动创建)
- 在 mu-plugins 文件夹内 新建文件:zibll-carousel.[color=rgb(255, 0, 0) !important][backcolor=transparent !important]php
将以下完整代码复制进去并保存: -
- <?<a href="https://www.ccyuanma.com/tag/148.html" class="zibll-tag-link" title="标签:php">php</a>
- /**
- * Plugin Name: Zibll 文章轮播组件(无标题纯净版)
- * 保存位置:/wp-content/mu-plugins/zibll-carousel-notitle.php
- */
-
- if (!defined('ABSPATH')) exit;
-
- class Zibll_Magazine_Carousel_Widget extends WP_Widget {
-
- public function __construct() {
- parent::__construct(
- 'zibll_magazine_carousel',
- '【初晨杂志轮播】最新文章',
- array('description' => '无标题显示,直接进入轮播内容')
- );
- }
-
- private function get_data($instance) {
- $post_count = !empty($instance['post_count']) ? intval($instance['post_count']) : 9;
- if ($post_count < 3) $post_count = 9;
-
- $args = array(
- 'posts_per_page' => $post_count,
- 'post_status' => 'publish',
- 'orderby' => 'date',
- 'order' => 'DESC'
- );
-
- if (!empty($instance['cat'])) {
- $args['cat'] = intval($instance['cat']);
- }
-
- $posts = get_posts($args);
-
- if (count($posts) < 3) return false;
-
- $data = array();
- $valid_groups = floor(count($posts) / 3);
-
- for ($i = 0; $i < $valid_groups; $i++) {
- $offset = $i * 3;
- $data[] = array(
- 'm<a href="https://www.ccyuanma.com/tag/108.html" class="zibll-tag-link" title="标签:AI">AI</a>n' => $this->fmt($posts[$offset]),
- 'side1' => $this->fmt($posts[$offset + 1]),
- 'side2' => $this->fmt($posts[$offset + 2])
- );
- }
- return $data;
- }
-
- private function fmt($post) {
- $thumb = get_the_post_thumbnail_url($post->ID, 'medium_large');
-
- if (empty($thumb)) {
- preg_match('/<img[^>]+src=[\'"]([^\'"]+)[\'"]/i', $post->post_content, $matches);
- $thumb = $matches[1] ?? '';
- }
-
- if (empty($thumb)) {
- $colors = array('ff6b6b', '4ecdc4', '45b7d1', '96ceb4', 'feca57');
- $color = $colors[$post->ID % count($colors)];
- $thumb = "https://via.placeholder.com/800x500/{$color}/ffffff?text=" . urlencode(mb_substr(get_the_title($post), 0, 4));
- }
-
- $cat_obj = get_the_category($post->ID);
-
- return array(
- 'url' => get_permalink($post),
- 'title' => get_the_title($post) ?: '无标题',
- 'excerpt' => wp_trim_words($post->post_content, 20, '...'),
- 'thumb' => $thumb,
- 'cat' => $cat_obj[0]->name ?? '精选',
- 'views' => function_exists('zib_get_pageviews') ? zib_get_pageviews($post->ID) : rand(100, 999),
- 'date' => human_time_diff(get_the_time('U', $post), current_time('timestamp')) . '前'
- );
- }
-
- public function widget($args, $instance) {
- // 获取数据
- $data = $this->get_data($instance);
-
- if ($data === false || empty($data)) {
- if (current_user_can('manage_options')) {
- echo $args['before_widget'];
- // 注释掉标题输出
- // echo $args['before_title'] . '最新文章' . $args['after_title'];
- echo '<div style="padding:20px;background:#f8f9fa;border-radius:8px;text-align:center;color:#666;">需要至少3篇文章</div>';
- echo $args['after_widget'];
- }
- return;
- }
-
- $widget_id = 'zmc-' . $this->number;
- $group_count = count($data);
-
- wp_enqueue_style('owl-carousel', 'https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css');
- wp_enqueue_script('owl-carousel', 'https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js', array('jquery'), null, true);
-
- echo $args['before_widget'];
-
- /* ===== 标题已完全移除 ===== */
- // 以下代码被注释掉,不再显示"最新文章"标题
- // $title = !empty($instance['title']) ? $instance['title'] : '最新文章';
- // if ($title) {
- // echo $args['before_title'] . esc_html($title) . $args['after_title'];
- // }
-
- ?>
-
- <div class="zmc-wrapper" id="<?php echo esc_attr($widget_id); ?>">
- <div class="zmc-carousel owl-carousel">
- <?php foreach ($data as $index => $group): ?>
- <div class="zmc-slide">
- <!-- 左侧大图 -->
- <a href="<?php echo esc_url($group['main']['url']); ?>" class="zmc-main">
- <div class="zmc-img-box">
- <img src="<?php echo esc_url($group['main']['thumb']); ?>" alt="<?php echo esc_attr($group['main']['title']); ?>">
- </div>
- <span class="zmc-cat-badge"><?php echo esc_html($group['main']['cat']); ?></span>
- <div class="zmc-text-overlay">
- <h3 class="zmc-big-title"><?php echo esc_html($group['main']['title']); ?></h3>
- <p class="zmc-excerpt"><?php echo esc_html($group['main']['excerpt']); ?></p>
- <div class="zmc-meta-bar">
- <span class="zmc-meta-item"><i class="fa fa-eye"></i> <?php echo $group['main']['views']; ?> 阅读</span>
- <span class="zmc-meta-item"><?php echo $group['main']['date']; ?></span>
- </div>
- </div>
- </a>
-
- <!-- 右侧双小图 -->
- <div class="zmc-side-stack">
- <a href="<?php echo esc_url($group['side1']['url']); ?>" class="zmc-side-item">
- <div class="zmc-img-box">
- <img src="<?php echo esc_url($group['side1']['thumb']); ?>" >
- </div>
- <div class="zmc-text-overlay">
- <h4 class="zmc-small-title"><?php echo esc_html($group['side1']['title']); ?></h4>
- <span class="zmc-side-cat"><?php echo esc_html($group['side1']['cat']); ?></span>
- </div>
- </a>
- <a href="<?php echo esc_url($group['side2']['url']); ?>" class="zmc-side-item">
- <div class="zmc-img-box">
- <img src="<?php echo esc_url($group['side2']['thumb']); ?>" >
- </div>
- <div class="zmc-text-overlay">
- <h4 class="zmc-small-title"><?php echo esc_html($group['side2']['title']); ?></h4>
- <span class="zmc-side-cat"><?php echo esc_html($group['side2']['cat']); ?></span>
- </div>
- </a>
- </div>
- </div>
- <?php endforeach; ?>
- </div>
-
- <!-- 左右箭头 -->
- <button class="zmc-arrow zmc-prev" type="button">‹</button>
- <button class="zmc-arrow zmc-next" type="button">›</button>
-
- <?php if ($group_count > 1): ?>
- <!-- 极简圆点指示器 -->
- <div class="zmc-dots-simple">
- <?php for ($i = 0; $i < $group_count; $i++): ?>
- <span class="<?php echo $i===0 ? 'active' : ''; ?>"></span>
- <?php endfor; ?>
- </div>
- <?php endif; ?>
- </div>
-
- <style>
- #<?php echo $widget_id; ?> {
- position: relative;
- background: var(--body-bg-color, #fff);
- border-radius: var(--main-radius, 12px);
- overflow: hidden;
- box-shadow: 0 4px 20px rgba(0,0,0,0.08);
- /* 顶部padding增加,因为没有标题了 */
- padding-top: 12px;
- padding-bottom: 15px;
- }
-
- #<?php echo $widget_id; ?> .zmc-slide {
- display: flex;
- gap: 12px;
- height: 440px;
- padding: 12px;
- box-sizing: border-box;
- }
-
- #<?php echo $widget_id; ?> .zmc-main {
- flex: 0 0 65%;
- position: relative;
- border-radius: 10px;
- overflow: hidden;
- display: block;
- text-decoration: none;
- box-shadow: 0 4px 15px rgba(0,0,0,0.12);
- transition: transform 0.3s;
- }
-
- #<?php echo $widget_id; ?> .zmc-main:hover {
- transform: translateY(-2px);
- }
-
- #<?php echo $widget_id; ?> .zmc-img-box {
- position: absolute;
- inset: 0;
- overflow: hidden;
- }
-
- #<?php echo $widget_id; ?> img {
- width: 100%;
- height: 100%;
- object-fit: cover;
- transition: transform 0.6s ease;
- }
-
- #<?php echo $widget_id; ?> a:hover img {
- transform: scale(1.08);
- }
-
- #<?php echo $widget_id; ?> .zmc-cat-badge {
- position: absolute;
- top: 15px;
- left: 15px;
- background: var(--theme-color, #007bff);
- color: #fff;
- padding: 5px 14px;
- border-radius: 20px;
- font-size: 13px;
- font-weight: 600;
- z-index: 3;
- box-shadow: 0 2px 8px rgba(0,0,0,0.2);
- }
-
- #<?php echo $widget_id; ?> .zmc-text-overlay {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 30px;
- background: linear-gradient(to top,
- rgba(0,0,0,0.9) 0%,
- rgba(0,0,0,0.6) 50%,
- transparent 100%);
- z-index: 2;
- color: #fff;
- }
-
- #<?php echo $widget_id; ?> .zmc-big-title {
- margin: 0 0 10px 0;
- font-size: 28px;
- font-weight: 800;
- line-height: 1.2;
- color: #fff;
- text-shadow: 0 2px 8px rgba(0,0,0,0.6);
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
- }
-
- #<?php echo $widget_id; ?> .zmc-excerpt {
- margin: 0 0 12px 0;
- font-size: 15px;
- line-height: 1.5;
- color: rgba(255,255,255,0.9);
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
- }
-
- #<?php echo $widget_id; ?> .zmc-meta-bar {
- display: flex;
- gap: 20px;
- font-size: 13px;
- color: rgba(255,255,255,0.8);
- font-weight: 500;
- }
-
- #<?php echo $widget_id; ?> .zmc-meta-item i {
- margin-right: 4px;
- }
-
- #<?php echo $widget_id; ?> .zmc-side-stack {
- flex: 0 0 35%;
- display: flex;
- flex-direction: column;
- gap: 12px;
- }
-
- #<?php echo $widget_id; ?> .zmc-side-item {
- flex: 1;
- position: relative;
- border-radius: 10px;
- overflow: hidden;
- display: block;
- text-decoration: none;
- box-shadow: 0 4px 12px rgba(0,0,0,0.1);
- transition: transform 0.3s;
- }
-
- #<?php echo $widget_id; ?> .zmc-side-item:hover {
- transform: translateY(-2px);
- }
-
- #<?php echo $widget_id; ?> .zmc-side-item .zmc-text-overlay {
- padding: 20px;
- }
-
- #<?php echo $widget_id; ?> .zmc-small-title {
- margin: 0 0 6px 0;
- font-size: 15px;
- font-weight: 700;
- line-height: 1.3;
- color: #fff;
- text-shadow: 0 1px 4px rgba(0,0,0,0.5);
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- overflow: hidden;
- }
-
- #<?php echo $widget_id; ?> .zmc-side-cat {
- font-size: 11px;
- color: rgba(255,255,255,0.85);
- background: rgba(255,255,255,0.2);
- padding: 2px 8px;
- border-radius: 4px;
- display: inline-block;
- }
-
- #<?php echo $widget_id; ?> .zmc-arrow {
- position: absolute;
- top: 45%;
- transform: translateY(-50%);
- width: 44px;
- height: 64px;
- background: rgba(0,0,0,0.4);
- backdrop-filter: blur(4px);
- color: #fff;
- border: none;
- font-size: 28px;
- cursor: pointer;
- z-index: 10;
- transition: all 0.3s;
- display: flex;
- align-items: center;
- justify-content: center;
- }
-
- #<?php echo $widget_id; ?> .zmc-arrow:hover {
- background: var(--theme-color, #007bff);
- }
-
- #<?php echo $widget_id; ?> .zmc-prev { left: 0; border-radius: 0 8px 8px 0; }
- #<?php echo $widget_id; ?> .zmc-next { right: 0; border-radius: 8px 0 0 8px; }
-
- #<?php echo $widget_id; ?> .zmc-dots-simple {
- display: flex;
- justify-content: center;
- gap: 8px;
- padding: 15px 0 5px;
- }
-
- #<?php echo $widget_id; ?> .zmc-dots-simple span {
- width: 8px;
- height: 8px;
- border-radius: 50%;
- background: #ddd;
- transition: all 0.3s;
- cursor: pointer;
- }
-
- #<?php echo $widget_id; ?> .zmc-dots-simple span.active {
- width: 24px;
- border-radius: 4px;
- background: var(--theme-color, #007bff);
- }
-
- @media (max-width: 768px) {
- #<?php echo $widget_id; ?> .zmc-slide {
- flex-direction: column;
- height: auto;
- gap: 10px;
- }
-
- #<?php echo $widget_id; ?> .zmc-main {
- height: 300px;
- flex: none;
- }
-
- #<?php echo $widget_id; ?> .zmc-side-stack {
- flex-direction: row;
- height: 160px;
- flex: none;
- }
-
- #<?php echo $widget_id; ?> .zmc-big-title {
- font-size: 22px;
- }
- }
- </style>
-
- <script>
- jQuery(function($){
- var owl = $('#<?php echo $widget_id; ?> .zmc-carousel').owlCarousel({
- items: 1,
- loop: <?php echo $group_count > 1 ? 'true' : 'false'; ?>,
- autoplay: <?php echo $group_count > 1 ? 'true' : 'false'; ?>,
- autoplayTimeout: 6000,
- smartSpeed: 700,
- nav: false,
- dots: false,
- onChanged: function(e) {
- var idx = e.item.index % <?php echo $group_count; ?>;
- $('#<?php echo $widget_id; ?> .zmc-dots-simple span').removeClass('active').eq(idx).addClass('active');
- }
- });
-
- $('#<?php echo $widget_id; ?> .zmc-prev').click(function(){ owl.trigger('prev.owl.carousel'); });
- $('#<?php echo $widget_id; ?> .zmc-next').click(function(){ owl.trigger('next.owl.carousel'); });
-
- $('#<?php echo $widget_id; ?> .zmc-dots-simple span').click(function(){
- var index = $(this).index();
- owl.trigger('to.owl.carousel', index);
- });
- });
- </script>
- <?php
- echo $args['after_widget'];
- }
-
- public function form($instance) {
- $title = !empty($instance['title']) ? $instance['title'] : '';
- $post_count = !empty($instance['post_count']) ? intval($instance['post_count']) : 9;
- $selected_cat = !empty($instance['cat']) ? intval($instance['cat']) : '';
- $cats = get_categories(array('hide_empty' => false));
- ?>
- <p>
- <label>标题(已隐藏,仅后台标识用):</label>
- <input type="text" class="widefat" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo esc_attr($title); ?>">
- </p>
- <p>
- <label>文章数量(建议 9 的倍数):</label>
- <input type="number" class="widefat" name="<?php echo $this->get_field_name('post_count'); ?>" value="<?php echo esc_attr($post_count); ?>" step="3" min="3">
- </p>
- <p>
- <label>分类筛选:</label>
- <select class="widefat" name="<?php echo $this->get_field_name('cat'); ?>">
- <option value="">全部分类</option>
- <?php foreach($cats as $cat): ?>
- <option value="<?php echo $cat->term_id; ?>" <?php selected($selected_cat, $cat->term_id); ?>>
- <?php echo esc_html($cat->name); ?> (<?php echo $cat->count; ?>篇)
- </option>
- <?php endforeach; ?>
- </select>
- </p>
- <p><small>提示:前台不显示小工具标题,直接进入轮播内容</small></p>
- <?php
- }
-
- public function update($new_instance, $old_instance) {
- return array(
- 'title' => sanitize_text_field($new_instance['title'] ?? ''),
- 'post_count' => intval($new_instance['post_count'] ?? 9),
- 'cat' => intval($new_instance['cat'] ?? 0)
- );
- }
- }
-
- add_action('widgets_init', function(){
- register_widget('Zibll_Magazine_Carousel_Widget');
- });
复制代码
|