如何整合WordPress特色图与滑块函数,实现无选定时互斥运行?
解决方案
核心逻辑是优先渲染用户设置的滑块,当滑块未配置时自动 fallback 到文章特色图,以下是整合并修复后的完整代码:
add_action('neve_before_primary', 'render_page_header', 5); function render_page_header() { // 获取用户设置的滑块短码字段 $slider_shortcode = get_field('smart_slider_header'); // 1. 优先渲染滑块:检查短码是否有效且非空 if (!empty($slider_shortcode)) { echo '<div class="smart-slider-header">'; echo do_shortcode($slider_shortcode); echo '</div>'; return; // 滑块已渲染,直接终止函数 } // 2. 滑块未配置时,检查并渲染特色图 $post_id = get_the_ID(); if (has_post_thumbnail($post_id)) { // 获取自定义标题字段 $pageTitle = get_field('page-title'); $pageSecondTitle = get_field('page_second_title'); // 获取特色图资源 $image = wp_get_attachment_image_src(get_post_thumbnail_id($post_id), 'single-post-thumbnail'); // 输出标题容器(对应你提到的上方标题区域) echo '<div class="page-header-title-container">'; if (!empty($pageTitle)) { echo '<h1 class="page-title">' . esc_html($pageTitle) . '</h1>'; } if (!empty($pageSecondTitle)) { echo '<p class="page-second-title">' . esc_html($pageSecondTitle) . '</p>'; } // 输出特色图容器 echo '<div class="featured-image-container">'; echo '<img src="' . esc_url($image[0]) . '" class="featured-image" alt="' . esc_attr(get_the_title($post_id)) . '">'; echo '</div>'; echo '</div>'; } }
关键细节说明
- 统一钩子挂载:将两个功能合并到同一个
render_page_header函数,避免重复挂载钩子 - 安全规范:添加
esc_html()、esc_url()、esc_attr()做内容转义,符合WordPress安全开发标准 - 逻辑优化:通过
return语句在滑块渲染后直接终止函数,减少不必要的代码执行 - 兼容性修复:用
get_the_ID()替代$post->ID,避免全局变量未声明导致的错误 - 结构补全:修复原特色图代码中缺失的起始div标签,补全标题容器的完整结构
调整优先级(可选)
如果需要优先显示特色图,滑块作为 fallback,只需调换判断顺序:
add_action('neve_before_primary', 'render_page_header', 5); function render_page_header() { $post_id = get_the_ID(); // 1. 优先渲染特色图 if (has_post_thumbnail($post_id)) { // ... 特色图渲染代码(同上) return; } // 2. 特色图不存在时渲染滑块 $slider_shortcode = get_field('smart_slider_header'); if (!empty($slider_shortcode)) { echo '<div class="smart-slider-header">'; echo do_shortcode($slider_shortcode); echo '</div>'; } }
内容的提问来源于stack exchange,提问作者Ryan1827
相关产品推荐
相关产品推荐

