普通方式输出
用到get_bookmarks()函数,然后通过foreach遍历输出友链数组的各个键值,直到输完为止.下面的代码取自本人INLOSIM主题底部友链工具
<?php $bookmarks = get_bookmarks('hide_invisible=0');if($bookmarks){ ?>
<div class="footer_links">
<span class="links_title">友情链接</span>
<div id="bookmarks" class="jv_bookmarks">
<?php foreach( $bookmarks as $bs ){ if ( $bs->link_rel == 'contact' || ( !is_home() && $bs->link_rel == 'acquaintance' ) ) { continue; } ?>
<a class="tra<?php echo $bs->link_visible == 'N' ? ' hide' : null; ?>" href="<?php echo $bs->link_url;?>" title="<?php echo $bs->link_description; ?>" target="<?php echo $bs->link_target == '' ? '_target' : $bs->link_target; ?>"> <span><svg class="icon-flinks" style="width:13px;height:13px;fill:#aaa;position:relative;top:2px;"><use xlink:href="#icon-flinks"></use></svg></span> <?php echo $bs->link_name; ?></a>
<?php }?>
<div class="clear"></div>
</div>
</div>
<?php } ?>
其中有一个条件判断 if...continue ,意思为当关系为contact(偶有联系)或者{非首页并且为acquaintance(熟人)}时 跳过,也就是不输出相应的条目.
异步Ajax方式
也是基于上面的结构,只不过需要通过js来判断首页,并且抓取php里面的$bookmarks变量内的各个值传给js内的变量再输出结构再用html()替换原有内容.
JS代码
var home_url = document.location.href.match(/http:\/\/([^\/]+)\//i)[0]; // 主页地址
// 函数:是否首页
function is_home() {
var home_href = location.href; // 当前页面的地址链接
return home_href == home_url ? true : false; // 如果是首页则true否则false
}
// 函数:返回友链结构
function html_bookmarks() {
if (bookmarks) { // 这个变量是php里面的$bookmarks
var links = is_home() ? bookmarks['home'] : bookmarks['nonhome']; //若为首页那么选择bookmarks内home值内的参数,否则选择nonhome值内的参数
var output = '';
for(var i in links) { // 将home或nonhome内获得的参数赋值给下面各变量(上面已作出判断)
var visible = links[i].link_visible == 'N' ? ' hide' : '';
var href = links[i].link_url;
var desc = links[i].link_description;
var name = links[i].link_name;
var img = links[i].link_img;
var target = links[i].link_target;
target = target == '' ? '_target' : target;
output += '<a class="tra' + visible + '" href="' + href + '" title="' + desc + '" target="' + target + '"><span><svg class="icon-flinks" style="width:13px;height:13px;fill:#aaa;position:relative;top:2px;"><use xlink:href="#icon-flinks"></use></svg></span> '+name+'</a>';
}
return output += '<div class="clear"></div>';
}
}
PHP结构
主要是输出变量用于传值给JS然后在ajax的complete(){}里面过一遍后替换原有html结构.
<script type="text/javascript">
var bookmarks = {
"nonhome":[
<?php $bookmarks = get_bookmarks('hide_invisible=0');if($bookmarks){ foreach( $bookmarks as $bs ){ if ( $bs->link_rel == 'contact' || $bs->link_rel == 'acquaintance' ) { continue; } ?>
{"link_rel":"<?php echo $bs->link_url;?>","link_visible":"<?php echo $bs->link_visible;?>","link_url":"<?php echo $bs->link_url;?>","link_description":"<?php echo $bs->link_description;?>","link_target":"","link_name":"<?php echo $bs->link_name;?>"},
<?php } } ?>
],
"home":[
<?php $bookmarks = get_bookmarks('hide_invisible=0');if($bookmarks){ foreach( $bookmarks as $bs ){ if ( $bs->link_rel == 'contact' ) { continue; } ?>
{"link_rel":"<?php echo $bs->link_url;?>","link_visible":"<?php echo $bs->link_visible;?>","link_url":"<?php echo $bs->link_url;?>","link_description":"<?php echo $bs->link_description;?>","link_target":"","link_name":"<?php echo $bs->link_name;?>"},
<?php } } ?>
]
};
</script>
上面是手动输出的html二维数组,若是通过wp本地化脚本wp_localize_script输出二维数组,则用下面这个php函数( 丢到functions.php )
// 友链判断-二维数组经过判断赋值给另一二维数组
function bookmarks($rel){
$bms = array();
$bookmarks = get_bookmarks('hide_invisible=0'); // 这个也是二维数组
if( $rel == 'nonhome'){ //若非首页
foreach( $bookmarks as $bs ){
if ( $bs->link_rel == 'contact' || $bs->link_rel == 'acquaintance' ) { continue;} // 若是contact或acquaintance则终止循环输出,意思是排除这两类关系输出
$bms[] = array( 'link_rel'=>$bs->link_rel,'link_visible'=>$bs->link_visible,'link_url'=>$bs->link_url,'link_description'=>$bs->link_description,'link_target'=>'','link_name'=>$bs->link_name);
}
}
if( $rel == 'home'){ //若是首页
foreach( $bookmarks as $bs ){
if ( $bs->link_rel == 'contact' ) { continue;} // 若是contact则终止循环输出,意思是排除这类关系输出
$bms[] = array( 'link_rel'=>$bs->link_rel,'link_visible'=>$bs->link_visible,'link_url'=>$bs->link_url,'link_description'=>$bs->link_description,'link_target'=>'','link_name'=>$bs->link_name);
}
}
return $bms; // 返回二维数组
}
Ajax执行替换
最后别忘了在ajax异步加载完成后执行html_bookmarks().用该函数输出的结构替换原有结构.
$('#bookmarks').html(html_bookmarks());
最后说明
友链最多分几种:全站友链,首页友链,内页友链,对应关系可以设定为friend,acquaintance,contact,以此来进行判断.
当然,也可以直接在Ajax的Success{}里面直接替换,但是pushstate后退首页时就没法替换回来,所以只能走上面繁琐的步骤加入判断。
Cheers !
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载但请务必注明出处,尊重他人劳动成果。
转载请注明出处链接 : https://www.inlojv.com/4587.html
