today in history.php代码:
<?php
/*
* Plugin Name: 那年今日(Today in History)
* Description: 显示“那年今日”的所有文章,包括今年的文章,支持显示特色图片或第一张文章图片,摘要,分类。
* Version: 1.9
* Author: 你的名字
* License: GPL2
*/
// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// 插件初始化
function tih_register_today_in_history_widget() {
register_widget( 'Tih_Today_In_History_Widget' );
}
add_action( 'widgets_init', 'tih_register_today_in_history_widget' );
// 插件的主要小部件类
class Tih_Today_In_History_Widget extends WP_Widget {
// 构造函数,定义小部件
function __construct() {
parent::__construct(
'tih_today_in_history_widget', // 小部件 ID
'那年今日文章', // 小部件名称
array( 'description' => '显示那年今日的所有文章,包括今年的文章,并支持显示特色图片或第一张文章图片,摘要,分类' ) // 小部件描述
);
}
// 显示小部件内容
public function widget( $args, $instance ) {
// 检查是否定义了 before_widget 和 after_widget
$before_widget = isset($args['before_widget']) ? $args['before_widget'] : '<div class="widget">';
$after_widget = isset($args['after_widget']) ? $args['after_widget'] : '</div>';
$before_title = isset($args['before_title']) ? $args['before_title'] : '<h2>';
$after_title = isset($args['after_title']) ? $args['after_title'] : '</h2>';
// 输出小部件的 HTML
echo $before_widget;
echo $before_title . '那年今日' . $after_title;
// 获取当前日期
$today = current_time('Y-m-d');
$month_day = date('m-d'); // 获取当前的月份和日期,忽略年份
// 获取所有年份中,今天日期的文章(包括今年的)
$args = array(
'posts_per_page' => 5, // 显示5篇文章,后续可以根据需求增加设置项
'orderby' => 'date',
'order' => 'DESC',
'date_query' => array(
array(
'month' => date('m'),
'day' => date('d'),
),
),
);
// 执行查询
$query = new WP_Query($args);
if ($query->have_posts()) :
echo '<ul class="tih-articles-list">';
while ($query->have_posts()) : $query->the_post();
// 获取文章的特色图片
$featured_image = get_the_post_thumbnail_url( get_the_ID(), 'thumbnail' );
// 如果没有特色图片,则尝试获取文章中的第一张图片
if ( ! $featured_image ) {
$content = get_the_content();
preg_match_all('/<img[^>]+src=["\'](https?:\/\/[^"\']+)["\']/i', $content, $matches);
if ( isset($matches[1][0]) ) {
$featured_image = $matches[1][0]; // 获取第一张图片的URL
}
}
// 输出文章
echo '<li class="tih-article-item">';
// 如果有特色图片,显示它
if ( $featured_image ) {
echo '<div class="tih-image-wrapper"><img src="' . esc_url( $featured_image ) . '" alt="' . get_the_title() . '" class="tih-featured-image" /></div>';
}
echo '<div class="tih-content-wrapper">';
// 显示文章标题
echo '<a href="' . get_permalink() . '" class="tih-title">' . get_the_title() . '</a>';
// 获取文章的摘要,并限制在300字符以内
$excerpt = get_the_excerpt();
$excerpt_length = 400; // 修改为 300 或 400,控制摘要的字符数
// 使用 wp_trim_words 来控制字符数
if ( strlen( $excerpt ) > $excerpt_length ) {
$excerpt = mb_substr( $excerpt, 0, $excerpt_length, 'UTF-8') . '...'; // 使用mb_substr来确保截取的是完整的字符
}
if ( $excerpt ) {
echo '<p class="tih-excerpt">' . $excerpt . '</p>';
}
// 显示文章分类
$categories = get_the_category();
if ( ! empty( $categories ) ) {
echo '<p class="tih-categories">分类:';
foreach ( $categories as $category ) {
echo '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '">' . esc_html( $category->name ) . '</a> ';
}
echo '</p>';
}
// 处理发布时间(日期 + X YEARS AGO)
$post_date = get_the_date('Y-m-d'); // 获取文章的发布日期
$year_diff = date('Y') - get_the_date('Y');
$time_label = '';
$full_date = get_the_date('Y年m月d日'); // 完整的发布日期格式(例如:2024年10月7日)
// 如果是今年的文章
if ( date('Y') == get_the_date('Y') ) {
// 今年的文章,显示完整的日期
$time_label = '';
echo '<span class="tih-publish-date">日期:' . $full_date . '</span>';
} else {
// 过去年份的文章,显示相对时间
if ($year_diff == 1) {
$time_label = '(One Year Ago)';
} else {
$time_label = '(' . $year_diff . ' Years Ago)';
}
// 显示发布日期和过去的年数
echo '<span class="tih-publish-date">日期:' . $full_date . ' ' . $time_label . '</span>';
}
echo '</div>'; // .tih-content-wrapper
echo '</li>';
endwhile;
echo '</ul>';
else :
echo '<p>今天没有相关文章。</p>';
endif;
wp_reset_postdata();
echo $after_widget;
}
// 后台小部件设置
public function form( $instance ) {
// 可以在这里添加后台的设置选项
}
// 保存小部件的设置
public function update( $new_instance, $old_instance ) {
return $new_instance;
}
}
// 插件样式
function tih_plugin_styles() {
wp_enqueue_style( 'tih-plugin-styles', plugin_dir_url(__FILE__) . 'system.css' );
}
add_action('wp_enqueue_scripts', 'tih_plugin_styles');
system.css代码
.tih-articles-list {
list-style-type: none;
padding: 0;
}
.tih-article-item {
display: flex;
margin-bottom: 20px;
}
.tih-image-wrapper {
margin-right: 15px;
position: relative;
}
.tih-featured-image {
width: 100px;
height: 100px;
object-fit: cover;
border-radius: 8px;
}
.tih-content-wrapper {
flex-grow: 1;
}
.tih-title {
font-size: 18px;
font-weight: bold;
color: #333;
text-decoration: none;
margin: 10px 0;
}
.tih-title:hover {
text-decoration: underline;
}
.tih-excerpt {
font-size: 14px;
color: #666;
margin-bottom: 10px;
}
.tih-categories {
font-size: 12px;
margin-top: 5px;
}
.tih-categories a {
font-size: 12px;
color: #0073aa;
text-decoration: none;
}
.tih-categories a:hover {
text-decoration: underline;
}
.tih-publish-date {
font-size: 12px;
color: #999;
margin-top: 5px;
}
.tih-publish-date span {
font-weight: bold;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容