WordPress根据不同文章形式使用不同模板

WordPress根据不同文章形式使用不同模板

文章形式这个功能就是定义某一篇文章在列表中展现的形式,在发表文章时,可以选择发表的形式,可以只写一句话像微博一样,可以单独分享一个图片、视频或者音乐。一般来讲文章形式常用的只有标准和日志两种,如果需要其它的形式,可以使用以下代码加至 functions.php 中。

add_theme_support('post-formats', array('aside', 'chat','gallery','image','link', 'quote', 'status', 'video', 'audio'));

以上 array 中的依次顺序是:日志、聊天、相册、图像、链接、引语、状态、视频、音频,具体每个形式的作用显而意见,可以上面的支持格式添加或删减。

WordPress根据不同文章形式使用不同模板

还可以添加文章格式支持页面和自定义文章类型:

//添加软件下载形式
add_post_type_support( 'soft', 'post-formats' );

不同的主题内页调用不一样,这里以简单的 single.php 作为内页举例,如果希望选择的软件内页形式与标准的内页形式不同,可以直接复制 single.php 文件,并改名成 single-soft.php 到你的主题的根目录下面,并且添加如下代码片段到 functions.php 中:

add_action('template_include', 'load_single_template');
function load_single_template($template) {
  $new_template = '';
  if( is_single() ) {
    global $post;
    if ( has_post_format( 'soft' )) {
      $new_template = locate_template(array('single-soft.php' ));
    }
  }
  return ('' != $new_template) ? $new_template : $template;
}

现在,就可以使用 single-soft.php 这个文件作为你的文章形式了,在发布文章的时候选择自定义添加的软件即可。

如果你只是想改变文章形式中的循环,可以将 single.php 中的:

<?php get_template_part( 'content', get_post_format() ); ?>

替换成:

<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>

然后在主题目录创建 content.php(标准)、content-aside.php(日志)、content-soft.php(软件)等等,总之是要创建 content-xxx(形式名称).php 就 OK 了。

附目前正在使用的代码:

function post_format_setup()
{
    add_theme_support('post-formats', array('aside', 'chat','gallery','image','link', 'quote', 'status', 'video', 'audio'));
}
add_action('after_setup_theme', 'post_format_setup');

/*文章形式重新命名或汉化*/

function rename_post_formats( $safe_text ) 
{ 
    if ( $safe_text == '日志' ) return '新日志'; 
    if ( $safe_text == '聊天' ) return '新聊天'; 
    return $safe_text; 
} 
add_filter( 'esc_html', 'rename_post_formats' );

/*注册不同文章形式的样式*/

add_action('template_include', 'load_single_template');
function load_single_template($template) {
  $new_template = '';
  // single post template   
  if( is_single() ) {
    global $post;
    // template for post with video format   
    if ( has_post_format( 'aside' )) {
      // use template file single-video.php for video format   
      $new_template = locate_template(array('single-aside.php' ));
    }
  }
  return ('' != $new_template) ? $new_template : $template;
}

© 声明:本站原创文章采用BY-NC-SA创作共用协议,转载时请标明本文地址;非原创(转载)文章版权归原作者所有。

RECENT POSTS

数据库查询次数:12次,页面生成时间:0.032秒。