问题描述
对于图像相册,我需要一个代码,使用下一个/以前的链接,使您到该帖子中的下一个/上一个图像,并保持图像按正确的顺序插入他们的职位。 (每个主要新闻网站似乎都有这个功能。)
目前,如果您在 WordPress 中将<?php next_image_link( false, 'Next Image' ); ?>
和<?php previous_image_link( false, 'Previous Image' ); ?>
添加到您的 image.php 或您的附件模板,如果图像在其他地方使用,链接可能会将您带到不同的帖子中的图库。
为了进一步说明这个问题,take a look at this gallery 。有三个图像。如果您点击企鹅并开始使用上一个/下一个链接滚动浏览它们,您将看到不应显示的其他图像!
这个问题还没有解决。我不得不使用媒体编辑器附加帖子… 太糟糕当图像上传时,WP 并不总是这样做。
最佳解决方案
这些功能将有助于:
//function to get next or previous keys in an array
function array_navigate($array, $key){
$keys = array_keys($array);
$index = array_flip($keys);
$return = array();
$return['prev'] = (isset($keys[$index[$key]-1])) ? $keys[$index[$key]-1] : end($keys);
$return['next'] = (isset($keys[$index[$key]+1])) ? $keys[$index[$key]+1] : current($keys);
return $return;
}
function previous_attachment_ID($att_post){
//get the attachments which share the same post parent
$images =& get_children('post_type=attachment&post_mime_type=image&output=ARRAY_N&orderby=menu_order&order=ASC&post_parent='.$att_post->post_parent);
if($images){
//get the id of the previous attachment
$ppid_arr = array_navigate($images, $att_post->ID);
$ppid = $ppid_arr['prev'];
return $ppid;
}
return false;
}
//previous attachment link function
function prev_att_link($att_post=null){
if($att_post == null){
global $post;
$att_post = get_post($post);
}
$ppid = previous_attachment_ID($att_post);
if($ppid != false){
return '<a href="'%20.%20get_attachment_link($ppid)%20.%20'" class="previous-attachment-link">Previous</a>';
} else {
//there is no previous link
return false;
}
}
function next_attachment_ID($att_post){
//get the attachments which share the same post parent
$images =& get_children('post_type=attachment&post_mime_type=image&output=ARRAY_N&orderby=menu_order&order=ASC&post_parent='.$att_post->post_parent);
if($images){
//get the id of the next attachment
$ppid_arr = array_navigate($images, $att_post->ID);
$ppid = $ppid_arr['next'];
return $ppid;
}
return false;
}
//next attachment link function
function next_att_link($att_post=null){
if($att_post == null){
global $post;
$att_post = get_post($post);
}
$ppid = next_attachment_ID($att_post);
if($ppid != false){
return '<a href="'%20.%20get_attachment_link($ppid)%20.%20'" class="next-attachment-link">Next</a>';
} else{
return false;
}
}
//back to gallery link function
function back_to_gal_link($text="Back to gallery"){
global $post;
$post = get_post($post);
$post_par = get_post($post->post_parent);
$slug = get_permalink($post_par->ID);
return '<a href="'.$slug.'">'.$text.'</a>';
}
//show all thumbnails function
function show_all_thumbs() {
global $post;
$post = get_post($post);
$images =& get_children( 'post_type=attachment&post_mime_type=image&output=ARRAY_N&orderby=menu_order&order=ASC&post_parent='.$post->post_parent);
if($images){
foreach( $images as $imageID => $imagePost ){
if($imageID==$post->ID){
} else {
unset($the_b_img);
$the_b_img = wp_get_attachment_image($imageID, 'thumbnail', false);
$thumblist .= '<a href="'.get_attachment_link($imageID).'">'.$the_b_img.'</a>';
}
}
}
return $thumblist;
}
通过这种方式,您可以根据需要实现上一个下一个设置,您可以在画廊中显示所有缩略图。
例如。:
<div class="back_to_gal_link">
<?php
echo back_to_gal_link().'<br />';
?>
</div>
<div class="prev_next_links">
<?php
if(prev_att_link()){
echo prev_att_link();
}
if(prev_att_link() && next_att_link()){
//insert a seperator between the two links
echo ' | ';
}
if(next_att_link()){
echo next_att_link();
}
?>
</div>
<div class="thumbnails">
<?php
echo show_all_thumbs();
?>
</div>
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。