首页 > 教程 > 关键词  > WordPress最新资讯  > 正文

WordPress 短代码相关文章实现(非插件)

2009-10-28 09:22 · 稿源:bbon.cn

在single文章页使用相关文章功能的好处是显而易见的,可以增加网站的粘度的同时,更多地是更方便地为用户列出了他可能关心的内容。一般情况下我们是使用水煮鱼的WordPress Related Posts插件来实现的,那么,在尽量节约插件的使用数量的前提下,我们还可以手动添加代码来实现。

1,相关文章非插件实现方法

以下为引用的内容:

<?php
//for use in the loop, list 5 post titles related to first tag on current post
$tags = wp_get_post_tags($post->ID);
if ($tags) {
 echo 'Related Posts';
 $first_tag = $tags[0]->term_id;
 $args=array(
 'tag__in' => array($first_tag),
 'post__not_in' => array($post->ID),
 'showposts'=>5,
 'caller_get_posts'=>1
 );
 $my_query = new WP_Query($args);
 if( $my_query->have_posts() ) {
 while ($my_query->have_posts()) : $my_query->the_post(); ?>
 <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
 <?php
 endwhile;
 }
}
?>

2,创建相关文章的发布短代码

把下面的代码写入到你的主题文件夹中的function.php中

以下为引用的内容:

function related_posts_shortcode( $atts ) {
 extract(shortcode_atts(array(
 'limit' => '5',
 ), $atts));

 global $wpdb, $post, $table_prefix;

 if ($post->ID) {
 $retval = '<ul>';
 // Get tags
 $tags = wp_get_post_tags($post->ID);
 $tagsarray = array();
 foreach ($tags as $tag) {
 $tagsarray[] = $tag->term_id;
 }
 $tagslist = implode(',', $tagsarray);

 // Do the query
 $q = "SELECT p.*, count(tr.object_id) as count
 FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
 AND p.post_status = 'publish'
 AND p.post_date_gmt < NOW()
 GROUP BY tr.object_id
 ORDER BY count DESC, p.post_date_gmt DESC
 LIMIT $limit;";

 $related = $wpdb->get_results($q);
 if ( $related ) {
 foreach($related as $r) {
 $retval .= '
 <li><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>
';
 }
 } else {
 $retval .= '
 <li>No related posts found</li>
';
 }
 $retval .= '</ul>
';
 return $retval;
 }
 return;
}
add_shortcode('related_posts', 'related_posts_shortcode');

以后,你就可以在博客的任意位置插入下面的短代码,来实现相关文章的调用显示了。

以下为引用的内容:

[related_posts]

3,同一分类下的相关文章

实现了相关文章的调用后,有的人又希望列出的文章和原文是同一分类下的,那么如何实现呢?

首先,同样把下面的代码写入的主题文件夹中的function.php中

以下为引用的内容:

/**
 * related post with category
 * @param: int $limit limit of posts
 * @param: bool $catName echo category name
 * @param: string $title string before all entries
 * Example: echo fb_cat_related_posts();
 */
if ( !function_exists('fb_get_cat_related_posts') ) {
 function fb_get_cat_related_posts( $limit = 5, $catName = TRUE, $title = '<h3>Recent Pages</h3>' ) {

 if ( !is_single() )
 return;

 $limit = (int) $limit;
 $output = '';
 $output .= $title;

 $category = get_the_category();
 $category = (int) $category[0]->cat_ID;

 if ( $catName )
 $output .= __( 'Kategorie: ' ) . get_cat_name($category) . ' ';

 $output .= '<ul>';

 $args = array(
 'numberposts' => $limit,
 'category' => $category,
 );

 $recentposts = get_posts( $args );
 foreach($recentposts as $post) {
 setup_postdata($post);
 $output .= '<li><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>';
 }

 $output .= '</ul>';

 return $output;
 }
}

之后,调用自定义的函数fb_get_cat_related_posts就可以了,该函数包括3个参数

$limit (int) 定义显示文章数,int型数据;

$catName (bool) 输出分类名称,bool型数据( TRUE or FALSE)

$title (string) String for a text before all entries

原文地址:https://www.bbon.cn/2009/10/wordpress-articles-to-achieve-short-code-non-plug-in.html

  • 相关推荐
  • 大家在看
  • 1Password推出Psst!服务:更安全更便携的和他人共享账号密

    在工作场所和家庭环境中,我们时不时需要和他人共享账号密码,但安全地共享密码却可能非常棘手。1Password 旨在通过其新功能解决这个问题,该功能为你提供了一种以安全方式分享登录凭证的方法,甚至可以与那些没有该服务账户的人分享。这种新方法叫做 Psst!,是 Password Secure Sharing Tool(密码安全分享工具)的简称,它显然是该公司要求最多的功能之一。根据该公司进行的一项研究,大多数工人重复使用公司的凭证。在这些人中?

  • 增强隐私体验:1Password携手Fastmail推出邮件别名订阅服务

    为了抵御网络黑客的攻击,许多人选择了通过 1Password 等密码管理器来规划针对不同线上服务的复杂密码组合,以避免在数据泄露事件发生时被“一锅端”。不过从本周开始,1Password 又拓展了一项服务 —— 允许用户隐藏真实的电子邮件地址。此前,苹果已在 Sign In With Apple 等产品服务上提供了类似的体验。比如通过生成一次性的邮件地址,把它作为与真实邮件地址之间的桥梁,来更好地保护用户的晕死。而在 Fastmail 的协助下,1Pa

  • 得帆信息完成A轮融资,构建“低代码+AI”PaaS平台数字化新浪潮

    近日,得帆信息正式对外宣布完成A轮数千万人民币融资。本轮融资由百度风投领投,微村智科(由SaaS行业龙头微盟集团联合业内知名投资机构一村资本共同出资设立)跟投。华兴Alpha任此次融资的独家财务顾问。本轮融资将用于产品和技术的研发创新,布局全新营销体系,加速建立完善的生态合作圈层,深化核心行业解决方案,为更多企业快速实现数字化转型升级。得帆信息定位于低代码PaaS平台提供商,专注于企业级软件高生产力PaaS领域,致

  • 开源趣闻:AMDGPU驱动调用了Linux内核中的Intel新伙伴分配器代码

    Phoronix 报道称:作为改善视频内存管理工作的一部分,负责开发 AMDGPU 内核图形驱动程序的工程师们,现正希望利用英特尔在 i915 更新中引入的伙伴系统内存分配器(Buddy Allocator)代码。据悉,后者是英特尔为其专用 GPU 提供设备本地内存支持工作的一部分,其中包含了内存区域和其它概念变动。Phoronix 指出,Buddy Allocator 用于将系统内存资源执行等分操作,直到满足内存请求的需求为止。而本文提到的新伙伴分配器代码,正是

  • 抖音前端团队致歉:早期参考了阿里Ant Design代码文案

    近日,抖音企业级应用 UI 解决方案 Semi Design 宣布开源,采用了 MIT 开源许可协议。不过,有细心的网友发现,其代码仓库的部分文案被发现有阿里设计系统 Ant Design 的痕迹。

  • 微软在最后一刻砍掉.NET 6热重载代码 结果惹恼开源社区

    在萨蒂亚·纳德拉接管了微软 CEO 的职务之后,这家软件巨头一直在过去 10 年里积极拥抱开源,并且主动传达了对 Linux 和开源社区的热爱。五年前,该公司更是加入了 Linux 基金会,且官方对此表示了赞许。然而由于 .NET 社区正在酝酿的一场风暴,所有这些善意,都正处于一触即溃的危险边缘。据悉,微软内部的一项有争议的商业决策,让许多人都开始质疑该公司对开源的承诺。多个消息来源向 TheVerge 透露,此举同样激怒了微软自家的?

  • GitHub:30%的新写代码都是在AI编程工具Copilot帮助下完成的

    开源软件开发商 GitHub 近日表示,新写的 30% 代码都是在 AI 编程工具 Copilot 的帮助下完成的。Copilot 可以查看人类程序员编写的代码,并建议进一步的行数或替代代码,从而消除了编码中的一些重复性劳动。Copilot 建立在 OpenAI Codex 算法的基础上,该算法是在数 TB 的公开源代码上训练出来的,可以将人类语言翻译成编程语言。它作为程序员的一个更复杂的自动完成工具使用。GitHub Next 的副总裁 Oege de Moor 表示:“我们从用

  • 字节回应抄袭阿里代码 承认早期使用了Ant Design的文案

    近日,字节跳动开源了设计系统和UI库Semi Design后,被发现有阿里设计系统Ant Design的痕迹。随后字节跳动的工程师发表了致歉声明,承认早期使用了 Ant Design 的文案,但现在的版本与Ant Design相差巨大。

  • 代码风起,平台化和生态化支撑厂商规模化发展

    摘要:在云计算和移动互联网的助推下,企业数字化转型加快,软件应用开发的需求激增,低代码平台应势崛起。从发展路径看,中国低代码平台厂商大致可分为两类:应用衍生类厂商和原生低代码厂商。低代码厂商最终发展趋势将是平台化和生态化,通过联合第三方开发商等合作伙伴,打造生态,为探索更具规模化能力的商业模式打下基础。当前,企业数字化转型不断深入,快速、敏捷地开发数字化应用成为了实现业务数字化的关键。不过,企业却

  • macOS代码再次提及High Power模式:优化性能以支持资源密集型任务

    今年 9 月下旬,macOS Monterey 的代码中首次提及了“High Power”模式;而在近日更新的候选版本中再次提及了“High Power”模式,并提供了更多细节。在代码中写道:“你的 Mac 将优化性能以更好地支持资源密集型任务。这可能会导致更响亮的风扇噪音”。在M1 Mac上的macOS Monterey测试版中似乎没有高功率模式,所以这有可能是下周推出的M1 Pro和M1 Max MacBook Pro 机器独有的东西。今天在发布会上苹果没有提到这样的功能。也有可

这篇文章对你有价值吗?

  • 热门标签
京东双11红包