大理高端网站建设|网站托管|极速建站|WordPress主题设计开发

wordpress自定义域函数get_post_custom_values多个值循环

2015-11-08 1648次

wordpress自定义域函数get_post_custom_values多个值循环自定义域在Wordpress中有着相当重的份量,很多功能都可以在其中实现,最近有朋友要萨龙龙添加两个功能,一是缩略图使用自定义域来获取(支持外链),二是文章中显示幻灯片,这两个功能都已经在Deephoto主题中实现了,也将集成到Concise主题中,而且文章中显示幻灯片有两种方式:自定义域和简码。

自定义域函数get_post_custom_values是获取当前日志中所有自定义字段值,如果该值不存在或为空都将返回null。

一、使用自定义域来实现缩略图

  1. function post_thumbnail(){
  2.     global $post;
  3.     if(get_post_meta($post->ID, "imgt", true)) {
  4.         $values=get_post_custom_values( "imgt");
  5.         echo '<img src="'.$values[0].'" alt="'.$post->post_title.'" />';
  6.     } else { if( has_post_thumbnail() ){
  7.         //特色图像
  8.     } else {
  9.         //默认缩略图
  10.     }
  11.            }
  12. }

通过以上代码获取缩略图就有三种方式:自定义域(img)、特色图像和默认缩略图,使用<?php post_thumbnail(); ?>来获取缩略图。

二、获取自定义域并循环输出

1、获取相同的自定义域并循环输出

  1. <?php if(get_post_meta($post->ID, "slides", true)) { ?>
  2. <?php $slides = get_post_custom_values( "slides"); ?>
  3. <?php foreach ($slides as $key => $value){ ?>
  4. <article class="swiper-slide slide-post">
  5. <?php echo "$value"; ?>
  6. </article>
  7. <?php }} ?>

通过多添加几个自定义域(slides),就可以循环输出,再通过JS和CSS就可以实现幻灯片效果。

这个方法稍有些麻烦,也增加了数据量,所以我们在一个自定义域中添加多个值来循环输出,效果是一样。

2、获取一个自定义域中的多个值并循环输出

  1. <?php if(get_post_meta($post->ID, "slides", true)) { ?>
  2. <?php $slide_arr = get_post_custom_values( "slides");$slide_str = isset($slide_arr[0])? $slide_arr[0]:"";$slides = explode(PHP_EOL,$slide_str);?>//谢谢知言提供的这段代码
  3. <?php foreach ($slides as $slide){ ?>
  4. <article class="swiper-slide slide-post">
  5. <?php echo $slide; ?>
  6. </article>
  7. <?php }} ?>

自定义域中的多个值是要分开,可以换行,也可以使用符号,如果是|,字符串为$str, 那就用explode("|",$str),如果是换行,就用explode(PHP_EOL,$str),这样就很方便的循环输出多个值。

不过使用自定义域来实现文章幻灯片时,位置是固定的,因为代码固定,但是管理方便,如果不想用此功能,可以使用代码直接删除全部自定义域。

如果要添加到文章的任意位置,可以使用简码来实现,自定义域中通过explode函数把字符串分割开,在简码中同样可以,例如:[slides img="图片链接1|图片链接2"],与获取的自定义域中的值是一样的,使用explode("|",$str)把img中的值(多张图片链接)分割并循环,使用较方便。
幻灯片演示与自定义域添加