普通方式输出
用到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