WordPress中如何用PHP短码从CPT获取测验图片并展示?
问题修复:短码无法加载测验描述图片
核心问题排查
你的短码能显示标题和跳转链接,但无法加载测验描述图片,大概率是自定义元键匹配错误——你代码里用的fca_qc_quiz_description_img可能不是插件存储图片ID的真实键名。另外代码中$quiz_description绑定的fca_qc_image元键,也可能不是存储测验描述的正确键。
解决方案步骤
1. 先确认正确的元键
在循环中加入代码,打印当前测验的所有自定义元数据,找到图片和描述对应的真实键名:
// 在$quiz_id = get_the_ID();这行后面添加 echo '<pre>'; print_r(get_post_custom($quiz_id)); echo '</pre>';
访问页面后查看输出的元数据列表,找到存储图片ID和测验描述的键,替换代码里的错误键即可。
2. 常见修复场景
场景1:插件用特色图片存储测验封面
如果测验的图片是设置为文章特色图片,替换图片获取部分的代码:
// 替换原来的图片获取代码 $quiz_image_id = get_post_thumbnail_id($quiz_id); $quiz_image = wp_get_attachment_image_src($quiz_image_id, 'thumbnail');
场景2:确认了正确的自定义元键
如果通过打印元数据找到了正确的键(比如实际是fca_qc_desc_img),则修改对应行:
$quiz_image_id = get_post_meta( $quiz_id, '你找到的图片元键', true ); // 同时修正测验描述的元键 $quiz_description = get_post_meta( $quiz_id, '你找到的描述元键', true );
3. 完整修正后的示例代码(以特色图片为例)
function fca_qc_quiz_shortcode($atts){ $atts = shortcode_atts( array( 'category' => '' ), $atts ); $quiz_category = $atts['category']; $args = array( 'post_type' => 'fca_qc_quiz', 'post_status' => 'publish', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'quiz_categories', 'field' => 'slug', 'terms' => $quiz_category ) ) ); $quizes = new WP_Query($args); $html = ''; if($quizes->have_posts()){ while($quizes->have_posts()){ $quizes->the_post(); $quiz_title = get_the_title(); $quiz_id = get_the_ID(); // 获取特色图片 $quiz_image_id = get_post_thumbnail_id($quiz_id); $quiz_image = wp_get_attachment_image_src($quiz_image_id, 'thumbnail'); // 获取测验描述(替换为你找到的正确元键) $quiz_description = get_post_meta( $quiz_id, 'fca_qc_quiz_description', true ); $html .= '<div class="quiz">'; $html .= '<h2>'.$quiz_title.'</h2>'; if(!empty($quiz_image)){ $html .= '<img src="'.$quiz_image[0].'" alt="'.$quiz_title.'">'; } if(!empty($quiz_description)){ $html .= '<p class="quiz-desc">'.$quiz_description.'</p>'; } $html .= '<a href="'.get_permalink().'">'.__('Start Quiz', 'fca_qc').'</a>'; $html .= '</div>'; } wp_reset_postdata(); }else{ $html .= '<p>'.__('No quiz found in this category', 'fca_qc').'</p>'; } return $html; } add_shortcode( 'quizzes_by_category', 'fca_qc_quiz_shortcode' );
额外提示
- 测试时可先注释掉
tax_query部分,加载所有测验确认图片正常显示后,再添加分类筛选逻辑。 - 如果插件有官方文档,优先查看文档中关于自定义字段的说明,避免手动猜元键。
内容的提问来源于stack exchange,提问作者M. Hussain
相关产品推荐
相关产品推荐

