Gutenberg/WordPress:修改短代码仅展示特定年份的文章
解决按年份分隔展示博客文章的方法
方案1:自定义短代码实现年份筛选
如果原生的ivory/posts-grid短代码不支持year参数,可以自己写一个自定义短代码来实现按年份筛选文章,将以下代码添加到主题的functions.php文件中:
function custom_year_posts_grid($atts) { $atts = shortcode_atts(array( 'year' => date('Y'), 'category' => '', 'posts_per_page' => 36, 'order' => 'desc' ), $atts); $args = array( 'post_type' => 'post', 'posts_per_page' => $atts['posts_per_page'], 'order' => $atts['order'], 'date_query' => array( array( 'year' => $atts['year'], ), ), ); if (!empty($atts['category'])) { $args['category__in'] = array($atts['category']); } $query = new WP_Query($args); ob_start(); if ($query->have_posts()) { echo '<h2>' . $atts['year'] . '年文章</h2>'; echo '<div class="posts-grid">'; while ($query->have_posts()) { $query->the_post(); // 自定义文章展示结构,可根据需求调整 echo '<div class="post-item">'; the_title('<h3><a href="' . get_permalink() . '">', '</a></h3>'); the_excerpt(); echo '</div>'; } echo '</div>'; wp_reset_postdata(); } else { echo '<p>该年份暂无文章</p>'; } return ob_get_clean(); } add_shortcode('year_posts_grid', 'custom_year_posts_grid');
之后在页面中按年份调用即可,每个年份单独添加一个短代码块:
<!-- wp:shortcode --> [year_posts_grid year="2020" category="25" posts_per_page="36" order="desc"] <!-- /wp:shortcode --> <!-- wp:shortcode --> [year_posts_grid year="2019" category="25" posts_per_page="36" order="desc"] <!-- /wp:shortcode -->
方案2:修改Ivory插件的短代码逻辑
如果有权限编辑Ivory插件文件,找到插件中处理posts-grid短代码的核心文件(一般在includes/shortcodes或类似目录下),找到文章查询的参数配置部分,添加对year参数的支持:
// 在查询参数数组前添加以下判断 if (!empty($settings['year'])) { $args['date_query'] = array( array( 'year' => $settings['year'], ), ); }
注意:修改插件文件后要做好备份,避免插件更新时覆盖修改内容。
方案3:检查可视化编辑器的内置筛选
如果是通过Ivory的可视化页面构建器添加的文章网格模块,可能年份筛选是隐藏在UI设置里的,而非直接通过短代码参数设置。打开页面编辑器,找到文章网格模块的设置面板,查看是否有「日期筛选」「年份过滤」类的选项,直接在可视化界面中设置年份即可。
内容的提问来源于stack exchange,提问作者meniK
相关产品推荐
相关产品推荐

