WordPress 的 Post Embed 功能,是 4.4 版本新增的,可以在任意 WordPress 站点用嵌入的方式插入 WordPress 博客内的文章。当然了,前提是嵌入和被嵌入的 WordPress 博客都支持 Post Embed 功能并且没有禁用掉。

效果就像上面这样了,我的文章没有浏览这项,所以就索性删除了,这样简简单单的显示也挺好。下面提供两种方法,一个是有简要版,一个是无简要版。

# 无简要版(代码来自fatesinger.com)

如果你认真写博客的话肯定会有在文章内引用你站内其他文章的时候。这个时候我们一般都是直接用一个a标签来搞定,虽然这样已经解决了问题,但是我们可以有更好的方案。

因为要调用的是站内文章,如果我们使用get_posts的话可以很好的调用文章的元信息,包括浏览量,缩略图之类的,甚至文章摘要(如果你有的话)。再加上可以自定义样式,这个内链看上去可要比普通的A标签高大上多了。比如下面的

我们可以用短代码的方式添加文章ID来直接调用文章,非常方便,下面给出实现方法。

下面的代码加入到functions.php

  1. function fa_insert_posts( $atts$content = null ){
  2.     extract( shortcode_atts( array(
  3.         'ids' => ''
  4.     ),
  5.         $atts ) );
  6.     global $post;
  7.     $content = '';
  8.     $postids =  explode(',', $ids);
  9.     $inset_posts = get_posts(array('post__in'=>$postids));
  10.     foreach ($inset_posts as $key => $post) {
  11.         setup_postdata( $post );
  12.         $content .=  '<div class="card-today-history"><div class="card-thContents"><div class="card-thLine"></div><div class="card-thHeroTitle"><a target="_blank" class="label--thTitle" href="' . get_permalink() . '">' . get_the_title() . '</a><div class="v-floatRight card-thMeta">' . get_comments_number(). '<i class="iconfont icon-comment"></i></div></div></div></div>';
  13.     }
  14.     wp_reset_postdata();
  15.     return $content;
  16. }
  17. add_shortcode('fa_insert_post', 'fa_insert_posts');

你可以根据你自己的需要来调整代码,也可以自己自定义CSS样式,我这里就不给出CSS代码了。请无视函数中的css命名,我是直接把历史上的今天的样式直接拿过来了。。

至于调用就非常简单了,直接使用短代码:

  1. [fa_insert_post ids=123,245]  

如果你不是在文章内容中,而是在其他地方想调用,则可使用:

  1. do_shortcode('[fa_insert_post ids=123,245]')  


# 简要版(代码来自cyhour.com)

下面的代码加入到functions.php中:

  1. function xx_insert_posts( $atts$content = null ){   
  2.     extract( shortcode_atts( array('ids' => ''), $atts ) );   
  3.     global $post;   
  4.     $content = '';   
  5.     $postids =  explode(',', $ids);   
  6.     $inset_posts = get_posts(array('post__in'=>$postids));   
  7.     foreach ($inset_posts as $key => $post) {   
  8.         setup_postdata( $post );   
  9.         $content .=  '   
  10.             <div class="wp-embed-post">   
  11.                 <p class="wp-embed-post-heading"><a target="_blank" class="wp-embed-post-title" href="' . get_permalink() . '">'. get_the_title() . '</a></p>   
  12.                 <div class="wp-embed-post-excerpt">'.wp_trim_words( get_the_content(), 100, '...' ).'</div>   
  13.                 <div class="wp-embed-post-footer">   
  14.                     <div class="wp-embed-post-site-title">   
  15.                         <a href="'.get_author_posts_url( get_the_author_meta( 'ID' ) ) .'" title="查看作者 '.get_the_author().' 发布的所有文章" rel="author">'   
  16.                             .get_avatar( get_the_author_meta('email'), '16' ).'<span>'.get_the_author().'</span>   
  17.                         </a>   
  18.                     </div>   
  19.                     <div class="wp-embed-post-meta">   
  20.                         <div class="wp-embed-post-reads">阅读    
  21.                             '.the_views(false, '''', false).'   
  22.                         </div>   
  23.                         <div class="wp-embed-post-comments">   
  24.                             <a target="_blank" class="wp-embed-post-title" href="' . get_permalink() . '#comments"> 评论 ' . get_comments_number(). '</a>   
  25.                         </div>   
  26.                     </div>   
  27.                 </div>   
  28.             </div>';   
  29.     }   
  30.     wp_reset_postdata();   
  31.     return $content;   
  32. }   
  33. add_shortcode('xx_insert_post', 'xx_insert_posts');  

直接在文章中(html 代码模式下)使用短代码:

  1. [xx_insert_post ids=111,222]   

如果不是在文章内容中,而是在其他地方想调用,则可使用:

  1. do_shortcode('[xx_insert_post ids=111,222]')