您的问题是foreach循环。。。此处:
if ($images) {
foreach($images as $image) {
$caption = $image->post_excerpt;
}
}
这里:
//alt title
foreach ($images as $attachment_id => $image) {
$img_alt = get_post_meta($attachment_id, \'_wp_attachment_image_alt\', true);
}
基本上,您的$caption和$img\\u alt变量是在循环的每次迭代中设置的,但您没有返回或保存新值。相反,您只是让循环继续运行,而$caption和$img\\u alt变量被设置为下一个值(使循环毫无价值)。
你需要做的就是这样。首先将PHP循环移到回调之外,并将标题和img\\u alt保存到两个新数组中。应该是这样的:
<?php
$images = get_children( array(
\'post_parent\' => $post->ID,
\'post_status\' => \'inherit\',
\'post_type\' => \'attachment\',
\'post_mime_type\' => \'image\',
\'order\' => \'ASC\',
\'orderby\' => \'menu_order ID\'
));
//caption
$captions = array();
if ($images) {
foreach($images as $image) {
$captions[] = $image->post_excerpt;
}
}
//alt title
$img_alts = array();
foreach ($images as $attachment_id => $image) {
$img_alts[] = get_post_meta($attachment_id, \'_wp_attachment_image_alt\', true);
}
?>
现在,将标题和javascript的值输出到页面上的两个隐藏列表中。输出它们的原因是为了我们以后可以使用一些javascript轻松获取文本。
<ol id="captions">
<?php
foreach ($captions as $caption){
echo \'<li>\' . $caption . \'</li>\';
};
?>
</ol>
对您的img\\U alts执行与上述相同的操作。
现在,在javascript函数中重写回调函数,使其看起来像这样。在此,我假设“currentIndex”与当前显示图像的索引号匹配:
function(title, currentArray, currentIndex, currentOpts) {
// get your caption
var caption = jQuery(\'#captions\').get(currentIndex).text();
// get your img alt
var img_alt = jQuery(\'#img_alts\').get(currentIndex).text();
var html = \'<span class="caption">\' + caption + \'</span>\';
html += \'<span class="img_alt">\' + img_alt + \'</span>\';
return html;
}
我还没有检查这段代码是否有效,所以可能会有一些错误,但如果您遵循我的逻辑,像这样的东西应该可以解决您的问题。希望这有帮助。