返回列表 发布新帖

wordpress子比美化-初晨杂志轮博文章显示

2253 2

马上注册,结交更多好友,享用更多功能,让你轻松玩转小K网。

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

×

wordpress子比美化-初晨杂志轮博文章显示

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
  • 将以下完整代码复制进去并保存:
    1. <?<a href="https://www.ccyuanma.com/tag/148.html" class="zibll-tag-link" title="标签:php">php</a>
    2. /**
    3. * Plugin Name: Zibll 文章轮播组件(无标题纯净版)
    4. * 保存位置:/wp-content/mu-plugins/zibll-carousel-notitle.php
    5. */
    6. if (!defined('ABSPATH')) exit;
    7. class Zibll_Magazine_Carousel_Widget extends WP_Widget {
    8.    
    9.     public function __construct() {
    10.         parent::__construct(
    11.             'zibll_magazine_carousel',
    12.             '【初晨杂志轮播】最新文章',
    13.             array('description' => '无标题显示,直接进入轮播内容')
    14.         );
    15.     }
    16.    
    17.     private function get_data($instance) {
    18.         $post_count = !empty($instance['post_count']) ? intval($instance['post_count']) : 9;
    19.         if ($post_count < 3) $post_count = 9;
    20.         
    21.         $args = array(
    22.             'posts_per_page' => $post_count,
    23.             'post_status'    => 'publish',
    24.             'orderby'        => 'date',
    25.             'order'          => 'DESC'
    26.         );
    27.         
    28.         if (!empty($instance['cat'])) {
    29.             $args['cat'] = intval($instance['cat']);
    30.         }
    31.         
    32.         $posts = get_posts($args);
    33.         
    34.         if (count($posts) < 3) return false;
    35.         
    36.         $data = array();
    37.         $valid_groups = floor(count($posts) / 3);
    38.         
    39.         for ($i = 0; $i < $valid_groups; $i++) {
    40.             $offset = $i * 3;
    41.             $data[] = array(
    42.                 'm<a href="https://www.ccyuanma.com/tag/108.html" class="zibll-tag-link" title="标签:AI">AI</a>n'  => $this->fmt($posts[$offset]),
    43.                 'side1' => $this->fmt($posts[$offset + 1]),
    44.                 'side2' => $this->fmt($posts[$offset + 2])
    45.             );
    46.         }
    47.         return $data;
    48.     }
    49.    
    50.     private function fmt($post) {
    51.         $thumb = get_the_post_thumbnail_url($post->ID, 'medium_large');
    52.         
    53.         if (empty($thumb)) {
    54.             preg_match('/<img[^>]+src=[\'"]([^\'"]+)[\'"]/i', $post->post_content, $matches);
    55.             $thumb = $matches[1] ?? '';
    56.         }
    57.         
    58.         if (empty($thumb)) {
    59.             $colors = array('ff6b6b', '4ecdc4', '45b7d1', '96ceb4', 'feca57');
    60.             $color = $colors[$post->ID % count($colors)];
    61.             $thumb = "https://via.placeholder.com/800x500/{$color}/ffffff?text=" . urlencode(mb_substr(get_the_title($post), 0, 4));
    62.         }
    63.         
    64.         $cat_obj = get_the_category($post->ID);
    65.         
    66.         return array(
    67.             'url'     => get_permalink($post),
    68.             'title'   => get_the_title($post) ?: '无标题',
    69.             'excerpt' => wp_trim_words($post->post_content, 20, '...'),
    70.             'thumb'   => $thumb,
    71.             'cat'     => $cat_obj[0]->name ?? '精选',
    72.             'views'   => function_exists('zib_get_pageviews') ? zib_get_pageviews($post->ID) : rand(100, 999),
    73.             'date'    => human_time_diff(get_the_time('U', $post), current_time('timestamp')) . '前'
    74.         );
    75.     }
    76.     public function widget($args, $instance) {
    77.         // 获取数据
    78.         $data = $this->get_data($instance);
    79.         
    80.         if ($data === false || empty($data)) {
    81.             if (current_user_can('manage_options')) {
    82.                 echo $args['before_widget'];
    83.                 // 注释掉标题输出
    84.                 // echo $args['before_title'] . '最新文章' . $args['after_title'];
    85.                 echo '<div style="padding:20px;background:#f8f9fa;border-radius:8px;text-align:center;color:#666;">需要至少3篇文章</div>';
    86.                 echo $args['after_widget'];
    87.             }
    88.             return;
    89.         }
    90.         
    91.         $widget_id = 'zmc-' . $this->number;
    92.         $group_count = count($data);
    93.         
    94.         wp_enqueue_style('owl-carousel', 'https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css');
    95.         wp_enqueue_script('owl-carousel', 'https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js', array('jquery'), null, true);
    96.         
    97.         echo $args['before_widget'];
    98.         
    99.         /* ===== 标题已完全移除 ===== */
    100.         // 以下代码被注释掉,不再显示"最新文章"标题
    101.         // $title = !empty($instance['title']) ? $instance['title'] : '最新文章';
    102.         // if ($title) {
    103.         //     echo $args['before_title'] . esc_html($title) . $args['after_title'];
    104.         // }
    105.         
    106.         ?>
    107.         
    108.         <div class="zmc-wrapper" id="<?php echo esc_attr($widget_id); ?>">
    109.             <div class="zmc-carousel owl-carousel">
    110.                 <?php foreach ($data as $index => $group): ?>
    111.                 <div class="zmc-slide">
    112.                     <!-- 左侧大图 -->
    113.                     <a href="<?php echo esc_url($group['main']['url']); ?>" class="zmc-main">
    114.                         <div class="zmc-img-box">
    115.                             <img src="<?php echo esc_url($group['main']['thumb']); ?>" alt="<?php echo esc_attr($group['main']['title']); ?>">
    116.                         </div>
    117.                         <span class="zmc-cat-badge"><?php echo esc_html($group['main']['cat']); ?></span>
    118.                         <div class="zmc-text-overlay">
    119.                             <h3 class="zmc-big-title"><?php echo esc_html($group['main']['title']); ?></h3>
    120.                             <p class="zmc-excerpt"><?php echo esc_html($group['main']['excerpt']); ?></p>
    121.                             <div class="zmc-meta-bar">
    122.                                 <span class="zmc-meta-item"><i class="fa fa-eye"></i> <?php echo $group['main']['views']; ?> 阅读</span>
    123.                                 <span class="zmc-meta-item"><?php echo $group['main']['date']; ?></span>
    124.                             </div>
    125.                         </div>
    126.                     </a>
    127.                     <!-- 右侧双小图 -->
    128.                     <div class="zmc-side-stack">
    129.                         <a href="<?php echo esc_url($group['side1']['url']); ?>" class="zmc-side-item">
    130.                             <div class="zmc-img-box">
    131.                                 <img src="<?php echo esc_url($group['side1']['thumb']); ?>" >
    132.                             </div>
    133.                             <div class="zmc-text-overlay">
    134.                                 <h4 class="zmc-small-title"><?php echo esc_html($group['side1']['title']); ?></h4>
    135.                                 <span class="zmc-side-cat"><?php echo esc_html($group['side1']['cat']); ?></span>
    136.                             </div>
    137.                         </a>
    138.                         <a href="<?php echo esc_url($group['side2']['url']); ?>" class="zmc-side-item">
    139.                             <div class="zmc-img-box">
    140.                                 <img src="<?php echo esc_url($group['side2']['thumb']); ?>" >
    141.                             </div>
    142.                             <div class="zmc-text-overlay">
    143.                                 <h4 class="zmc-small-title"><?php echo esc_html($group['side2']['title']); ?></h4>
    144.                                 <span class="zmc-side-cat"><?php echo esc_html($group['side2']['cat']); ?></span>
    145.                             </div>
    146.                         </a>
    147.                     </div>
    148.                 </div>
    149.                 <?php endforeach; ?>
    150.             </div>
    151.             
    152.             <!-- 左右箭头 -->
    153.             <button class="zmc-arrow zmc-prev" type="button">‹</button>
    154.             <button class="zmc-arrow zmc-next" type="button">›</button>
    155.             
    156.             <?php if ($group_count > 1): ?>
    157.             <!-- 极简圆点指示器 -->
    158.             <div class="zmc-dots-simple">
    159.                 <?php for ($i = 0; $i < $group_count; $i++): ?>
    160.                 <span class="<?php echo $i===0 ? 'active' : ''; ?>"></span>
    161.                 <?php endfor; ?>
    162.             </div>
    163.             <?php endif; ?>
    164.         </div>
    165.         <style>
    166.         #<?php echo $widget_id; ?> {
    167.             position: relative;
    168.             background: var(--body-bg-color, #fff);
    169.             border-radius: var(--main-radius, 12px);
    170.             overflow: hidden;
    171.             box-shadow: 0 4px 20px rgba(0,0,0,0.08);
    172.             /* 顶部padding增加,因为没有标题了 */
    173.             padding-top: 12px;
    174.             padding-bottom: 15px;
    175.         }
    176.         
    177.         #<?php echo $widget_id; ?> .zmc-slide {
    178.             display: flex;
    179.             gap: 12px;
    180.             height: 440px;
    181.             padding: 12px;
    182.             box-sizing: border-box;
    183.         }
    184.         
    185.         #<?php echo $widget_id; ?> .zmc-main {
    186.             flex: 0 0 65%;
    187.             position: relative;
    188.             border-radius: 10px;
    189.             overflow: hidden;
    190.             display: block;
    191.             text-decoration: none;
    192.             box-shadow: 0 4px 15px rgba(0,0,0,0.12);
    193.             transition: transform 0.3s;
    194.         }
    195.         
    196.         #<?php echo $widget_id; ?> .zmc-main:hover {
    197.             transform: translateY(-2px);
    198.         }
    199.         
    200.         #<?php echo $widget_id; ?> .zmc-img-box {
    201.             position: absolute;
    202.             inset: 0;
    203.             overflow: hidden;
    204.         }
    205.         
    206.         #<?php echo $widget_id; ?> img {
    207.             width: 100%;
    208.             height: 100%;
    209.             object-fit: cover;
    210.             transition: transform 0.6s ease;
    211.         }
    212.         
    213.         #<?php echo $widget_id; ?> a:hover img {
    214.             transform: scale(1.08);
    215.         }
    216.         
    217.         #<?php echo $widget_id; ?> .zmc-cat-badge {
    218.             position: absolute;
    219.             top: 15px;
    220.             left: 15px;
    221.             background: var(--theme-color, #007bff);
    222.             color: #fff;
    223.             padding: 5px 14px;
    224.             border-radius: 20px;
    225.             font-size: 13px;
    226.             font-weight: 600;
    227.             z-index: 3;
    228.             box-shadow: 0 2px 8px rgba(0,0,0,0.2);
    229.         }
    230.         
    231.         #<?php echo $widget_id; ?> .zmc-text-overlay {
    232.             position: absolute;
    233.             bottom: 0;
    234.             left: 0;
    235.             right: 0;
    236.             padding: 30px;
    237.             background: linear-gradient(to top,
    238.                 rgba(0,0,0,0.9) 0%,
    239.                 rgba(0,0,0,0.6) 50%,
    240.                 transparent 100%);
    241.             z-index: 2;
    242.             color: #fff;
    243.         }
    244.         
    245.         #<?php echo $widget_id; ?> .zmc-big-title {
    246.             margin: 0 0 10px 0;
    247.             font-size: 28px;
    248.             font-weight: 800;
    249.             line-height: 1.2;
    250.             color: #fff;
    251.             text-shadow: 0 2px 8px rgba(0,0,0,0.6);
    252.             display: -webkit-box;
    253.             -webkit-line-clamp: 2;
    254.             -webkit-box-orient: vertical;
    255.             overflow: hidden;
    256.         }
    257.         
    258.         #<?php echo $widget_id; ?> .zmc-excerpt {
    259.             margin: 0 0 12px 0;
    260.             font-size: 15px;
    261.             line-height: 1.5;
    262.             color: rgba(255,255,255,0.9);
    263.             display: -webkit-box;
    264.             -webkit-line-clamp: 2;
    265.             -webkit-box-orient: vertical;
    266.             overflow: hidden;
    267.         }
    268.         
    269.         #<?php echo $widget_id; ?> .zmc-meta-bar {
    270.             display: flex;
    271.             gap: 20px;
    272.             font-size: 13px;
    273.             color: rgba(255,255,255,0.8);
    274.             font-weight: 500;
    275.         }
    276.         
    277.         #<?php echo $widget_id; ?> .zmc-meta-item i {
    278.             margin-right: 4px;
    279.         }
    280.         
    281.         #<?php echo $widget_id; ?> .zmc-side-stack {
    282.             flex: 0 0 35%;
    283.             display: flex;
    284.             flex-direction: column;
    285.             gap: 12px;
    286.         }
    287.         
    288.         #<?php echo $widget_id; ?> .zmc-side-item {
    289.             flex: 1;
    290.             position: relative;
    291.             border-radius: 10px;
    292.             overflow: hidden;
    293.             display: block;
    294.             text-decoration: none;
    295.             box-shadow: 0 4px 12px rgba(0,0,0,0.1);
    296.             transition: transform 0.3s;
    297.         }
    298.         
    299.         #<?php echo $widget_id; ?> .zmc-side-item:hover {
    300.             transform: translateY(-2px);
    301.         }
    302.         
    303.         #<?php echo $widget_id; ?> .zmc-side-item .zmc-text-overlay {
    304.             padding: 20px;
    305.         }
    306.         
    307.         #<?php echo $widget_id; ?> .zmc-small-title {
    308.             margin: 0 0 6px 0;
    309.             font-size: 15px;
    310.             font-weight: 700;
    311.             line-height: 1.3;
    312.             color: #fff;
    313.             text-shadow: 0 1px 4px rgba(0,0,0,0.5);
    314.             display: -webkit-box;
    315.             -webkit-line-clamp: 2;
    316.             -webkit-box-orient: vertical;
    317.             overflow: hidden;
    318.         }
    319.         
    320.         #<?php echo $widget_id; ?> .zmc-side-cat {
    321.             font-size: 11px;
    322.             color: rgba(255,255,255,0.85);
    323.             background: rgba(255,255,255,0.2);
    324.             padding: 2px 8px;
    325.             border-radius: 4px;
    326.             display: inline-block;
    327.         }
    328.         
    329.         #<?php echo $widget_id; ?> .zmc-arrow {
    330.             position: absolute;
    331.             top: 45%;
    332.             transform: translateY(-50%);
    333.             width: 44px;
    334.             height: 64px;
    335.             background: rgba(0,0,0,0.4);
    336.             backdrop-filter: blur(4px);
    337.             color: #fff;
    338.             border: none;
    339.             font-size: 28px;
    340.             cursor: pointer;
    341.             z-index: 10;
    342.             transition: all 0.3s;
    343.             display: flex;
    344.             align-items: center;
    345.             justify-content: center;
    346.         }
    347.         
    348.         #<?php echo $widget_id; ?> .zmc-arrow:hover {
    349.             background: var(--theme-color, #007bff);
    350.         }
    351.         
    352.         #<?php echo $widget_id; ?> .zmc-prev { left: 0; border-radius: 0 8px 8px 0; }
    353.         #<?php echo $widget_id; ?> .zmc-next { right: 0; border-radius: 8px 0 0 8px; }
    354.         
    355.         #<?php echo $widget_id; ?> .zmc-dots-simple {
    356.             display: flex;
    357.             justify-content: center;
    358.             gap: 8px;
    359.             padding: 15px 0 5px;
    360.         }
    361.         
    362.         #<?php echo $widget_id; ?> .zmc-dots-simple span {
    363.             width: 8px;
    364.             height: 8px;
    365.             border-radius: 50%;
    366.             background: #ddd;
    367.             transition: all 0.3s;
    368.             cursor: pointer;
    369.         }
    370.         
    371.         #<?php echo $widget_id; ?> .zmc-dots-simple span.active {
    372.             width: 24px;
    373.             border-radius: 4px;
    374.             background: var(--theme-color, #007bff);
    375.         }
    376.         
    377.         @media (max-width: 768px) {
    378.             #<?php echo $widget_id; ?> .zmc-slide {
    379.                 flex-direction: column;
    380.                 height: auto;
    381.                 gap: 10px;
    382.             }
    383.             
    384.             #<?php echo $widget_id; ?> .zmc-main {
    385.                 height: 300px;
    386.                 flex: none;
    387.             }
    388.             
    389.             #<?php echo $widget_id; ?> .zmc-side-stack {
    390.                 flex-direction: row;
    391.                 height: 160px;
    392.                 flex: none;
    393.             }
    394.             
    395.             #<?php echo $widget_id; ?> .zmc-big-title {
    396.                 font-size: 22px;
    397.             }
    398.         }
    399.         </style>
    400.         
    401.         <script>
    402.         jQuery(function($){
    403.             var owl = $('#<?php echo $widget_id; ?> .zmc-carousel').owlCarousel({
    404.                 items: 1,
    405.                 loop: <?php echo $group_count > 1 ? 'true' : 'false'; ?>,
    406.                 autoplay: <?php echo $group_count > 1 ? 'true' : 'false'; ?>,
    407.                 autoplayTimeout: 6000,
    408.                 smartSpeed: 700,
    409.                 nav: false,
    410.                 dots: false,
    411.                 onChanged: function(e) {
    412.                     var idx = e.item.index % <?php echo $group_count; ?>;
    413.                     $('#<?php echo $widget_id; ?> .zmc-dots-simple span').removeClass('active').eq(idx).addClass('active');
    414.                 }
    415.             });
    416.             
    417.             $('#<?php echo $widget_id; ?> .zmc-prev').click(function(){ owl.trigger('prev.owl.carousel'); });
    418.             $('#<?php echo $widget_id; ?> .zmc-next').click(function(){ owl.trigger('next.owl.carousel'); });
    419.             
    420.             $('#<?php echo $widget_id; ?> .zmc-dots-simple span').click(function(){
    421.                 var index = $(this).index();
    422.                 owl.trigger('to.owl.carousel', index);
    423.             });
    424.         });
    425.         </script>
    426.         <?php
    427.         echo $args['after_widget'];
    428.     }
    429.    
    430.     public function form($instance) {
    431.         $title = !empty($instance['title']) ? $instance['title'] : '';
    432.         $post_count = !empty($instance['post_count']) ? intval($instance['post_count']) : 9;
    433.         $selected_cat = !empty($instance['cat']) ? intval($instance['cat']) : '';
    434.         $cats = get_categories(array('hide_empty' => false));
    435.         ?>
    436.         <p>
    437.             <label>标题(已隐藏,仅后台标识用):</label>
    438.             <input type="text" class="widefat" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo esc_attr($title); ?>">
    439.         </p>
    440.         <p>
    441.             <label>文章数量(建议 9 的倍数):</label>
    442.             <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">
    443.         </p>
    444.         <p>
    445.             <label>分类筛选:</label>
    446.             <select class="widefat" name="<?php echo $this->get_field_name('cat'); ?>">
    447.                 <option value="">全部分类</option>
    448.                 <?php foreach($cats as $cat): ?>
    449.                 <option value="<?php echo $cat->term_id; ?>" <?php selected($selected_cat, $cat->term_id); ?>>
    450.                     <?php echo esc_html($cat->name); ?> (<?php echo $cat->count; ?>篇)
    451.                 </option>
    452.                 <?php endforeach; ?>
    453.             </select>
    454.         </p>
    455.         <p><small>提示:前台不显示小工具标题,直接进入轮播内容</small></p>
    456.         <?php
    457.     }
    458.    
    459.     public function update($new_instance, $old_instance) {
    460.         return array(
    461.             'title'  => sanitize_text_field($new_instance['title'] ?? ''),
    462.             'post_count' => intval($new_instance['post_count'] ?? 9),
    463.             'cat'    => intval($new_instance['cat'] ?? 0)
    464.         );
    465.     }
    466. }
    467. add_action('widgets_init', function(){
    468.     register_widget('Zibll_Magazine_Carousel_Widget');
    469. });
    复制代码

评论2

手机用户QU59703Lv.2 发表于 昨天 04:05 | 查看全部 <
?????????????
回复

使用道具 举报

手机用户kH82382Lv.2 发表于 昨天 08:18 | 查看全部 <
现在赚钱这么容易了吗
回复

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

您需要 登录 后才可以回复,轻松玩转社区,没有帐号?立即注册
快速回复
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表