如何使用PHP函数get_posts建立文章列表

温馨提示:注册会员付费购买资源可永久免费下载更新版本

WordPress的Get_posts是一个强大的功能,允许开发者从WordPress数据库中检索内容。可以用最详细的方式指定要查找的文章、页面和自定义文章类型,获取自定义结果集,然后像PHP/MySQL Ninja一样过滤和排序项目。

但是,如果你不是PHP专业人士,也不用怕。有无数的PHP教程供你观看或阅读并学习这门语言。您只需要了解一点PHP知识就可以创建一个自定义的文章列表来显示在您的网站上,因为get_posts函数保留了一组参数,允许构建简单或高级的查询。

使用WordPress的get_posts分为两步:

首先,您必须构建一个自定义查询。实际上,它看起来不像一个MySQL查询,并且你不会编写任何SELECT语句。您只需要定义一个参数数组,并将其传递给get_posts函数。WordPress将这个数组转换成真正安全的MySQL查询,对数据库运行它,并返回一个文章数组。

其次,必须使用foreach循环遍历get_posts返回的结果集。

说到这里,在本文中,我们将首先深入探讨上面提到的关键概念,特别是如何让_posts工作,如何构建自定义查询以及如何在前端站点上显示数据。然后,我将提供一个真实的例子,其中包含一段代码。您可以在测试和开发的临时环境中获取、编辑和使用代码片段。

注意:我们通常区分文章、页面和自定义文章类型。在本文中,我们使用术语“帖子”来表示常规博客帖子以及页面和自定义帖子类型。所有这些文章类型都存储在数据库的“wp_posts”表中。文章之间的主要区别是“post_type”字段的值。从开发者的角度来看,文章、页面、自定义文章类型都是文章。

get_posts函数介绍

如何使用get_posts参数构建查询

如何显示get_posts数据

真实世界的例子:通过使用一个定制的短代码显示一个高度定制的文章列表。

get_posts函数介绍

Codex对get_posts函数的描述如下:

检索一组最新的文章,或符合给定条件的文章。

我们可以像这样使用get_posts:

$args = array(‘numberposts’ => 20,’category’ => 4);$my_posts = get_posts( $args );if( ! empty( $my_posts ) ){$output = ”;foreach ( $my_posts as $p ){$output .= ” . $p->post_title . ”;}$output .= ”;}

上述函数检索指定类别中最新的20篇博客文章(默认为‘post _ type’为‘post’),并返回一个对象数组$post。您可以遍历数组以在屏幕上显示文章。很简单吧?

Get_posts用于WP_Query检索文章条目,它用相同的参数保存一个WP_Query数组(有一些例外)。因此,我们有一个庞大的变量列表,可以用来构建我们的自定义查询。这些参数分为以下15类:

作者参数

类别参数

标签参数

分类参数

搜索参数

帖子和页面参数

密码参数

发布类型参数

订单& Orderby参数

日期参数

自定义字段(后元)参数

许可参数

Mime类型参数

缓存参数

返回字段参数

快速浏览上面的列表可以让你了解各种定制的查询,这些查询可以在WordPress数据库上构建和运行。因此,让我们更深入地研究查询参数,并开始构建我们的文章列表。

如何使用get_posts构建查询

每种类型的参数都与同一条信息相关。例如,我们可以构建一个查询来检索或排除指定作者的文章,并通过ID或nicename定义作者。类似地,我们可以构建查询来按类别、标签、类别、日期、自定义字段等获取文章。

如何使用参数构建简单的查询

许多参数可以以非常相似的方式使用,不管它们属于哪一类。例如,以下参数允许按文章作者查询数据库:

作者(int)-作者ID

author _ name(string)-作者的用户名。

author _ _ in(array)–多个作者id的数组

author _ _ not _ in(array)-要从结果集中排除的多个作者id的数组

我们如何使用这些参数?

在下面的例子中,参数“author”指定我们想要ID = 1的作者最近写的博客文章:

$my_posts = get_posts( array( ‘author’ => 1 ) );

相同的“author”参数允许以不同的方式查询数据库:

// return an array of posts from specific authors$my_posts = get_posts( array( ‘author’ => ‘1,5,12’ ) );// return an array of posts excluding the specified author$my_posts = get_posts( array( ‘author’ => -1 ) );

因此,根据参数的值,您将获得一个包含来自单个作者(整数)、多个作者(逗号分隔的值列表)或排除作者(负值)的文章的结果集。

其他参数提供了额外的灵活性。例如,下面的get_posts调用返回多个作者的最新博客文章的数组:

// return an array of posts from multiple authors$my_posts = get_posts( array( ‘author__in’ => array( 1, 5, 12 ) ) );

我们也可以排除多个作者:

// return an array of posts from multiple authors$my_posts = get_posts( array( ‘author__not_in’ => array( 1, 5, 12 ) ) );

同样,我们可以使用类别参数、标签参数和文章类型参数,但也有一些具体的区别。例如,请参见类别参数:

猫(整数)

类别名称(字符串)

类别_ _和(数组)

类别_ _在(数组)中

类别__not_in(数组)

反正不是所有的参数都像这些参数那么好用。此外,我们可以使用类别参数、文章类型参数、mime类型参数等。在单个查询中。这意味着我们可以精细地控制结果集中的项目,并且我们可以完全基于文章类型、自定义分类和自定义字段来构建更高级的查询。

所以,还是更深入的研究一下吧!

如何在WordPress中构建高级查询

让我们向前迈出一步,使用基于定制文章类型和定制分类的更高级的查询。假设您有以下文章类型:

名称:书籍

分类:图书_类别,图书_作者

支持:标题、编辑器、缩略图、摘录、自定义字段

自定义文章类型和自定义分类

假设您想要在自定义类别book_category中指定最新书籍的列表。这是一个参数数组:

$args = array(‘post_type’ => ‘book’,’tax_query’ => array(array(‘taxonomy’ => ‘book_category’,’field’ => ‘slug’,’terms’ => ‘sci-fi’)),);

以上参数只是告诉WordPress检索‘科幻’‘book _ category’。

带有’ tax_query ‘参数数组的数组(即数组array)。这些嵌套数组允许基于多个分类构建非常复杂的查询,如下例所示:

$args = array(‘numberposts’ => 10,’post_type’ => ‘book’,’relation’ => ‘AND’,’tax_query’ => array(array(‘taxonomy’ => ‘book_category’,’field’ => ‘slug’,’terms’ => ‘sci-fi’),array(‘taxonomy’ => ‘book_author’,’field’ => ‘term_id’,’terms’ => 22)));

这些参数允许我们检索ID #22所写的最新的10种“书籍”文章类型的列表。此参数设置此参数中列出的每个类别之间的逻辑关系。我们将它的值设置为above,因为我们需要检索属于作者#22所写类别的所有书籍。和

这些参数允许我们检索ID #22的“book_author”所写的“sci-fi”“book _ category”中最近10个“book”文章类型的列表。“relation”参数设置“tax_query”中列出的每个分类之间的逻辑关系。在上面,我们将它的值设置为和,因为我们需要检索所有属于“科幻”类别且作者为#22的书籍。

如何使用自定义字段参数构建元查询

有时,您可能需要基于特定的自定义字段键和/或值来构建文章列表。

$args = array(‘meta_key’ => ‘cover’,’meta_value’ => ‘paperback’,’meta_compare’ => ‘=’);

这些参数允许我们通过自定义字段键和值检索所有文章。’ Meta_compare ‘设置测试’ meta_value ‘参数值所需的运算符。这里的’ meta_value ‘是’ = ‘,也是默认值。

可用值为“=”、“!= ‘,’>’,’ > = ‘,”,’ tax _ query ‘ = > array(‘ taxonomy ‘ = > ‘ book _ category ‘,’ field ‘ = > ‘ slug ” terms ‘ = > ‘ fantasy ‘)));我们可以更进一步。在下一个示例中,我们将一个文章类型与一个自定义分类和两个自定义字段混合在一起:

$args = array(‘post_type’ => ‘book’,’tax_query’ => array(array(‘taxonomy’ => ‘book_category’,’field’ => ‘slug”terms’ => array( ‘fantasy’ ))),’meta_query’ => array(‘relation’ => ‘AND’,array(‘key’ => ‘year_published’,’value’ => 2010,’type’ => ‘numeric’,’compare’ => ‘>’,),array(‘key’ => ‘price’,’value’ => array( 10, 25 ),’type’ => ‘numeric’,’compare’ => ‘BETWEEN’,)));

在这里,我们设置一组参数来检索2010年以后出版的奇幻书籍列表。这些书的价格分别在10美元到25美元之间。

您可以看到’ meta_query ‘参数的工作方式与’ tax_query ‘参数非常相似。它保留了一个数组,并允许我们基于多个元键/值对构建高级查询。有关查询参数的完整列表和大量示例,请参考WP_Query文档。

为什么get_posts仅限5篇WordPress文章?

get_posts函数采用与WP_Query::parse_query()相同的参数(参见Codex),但一些特定的参数使它的工作方式与WP_Query对象略有不同。

也许您在查询中没有使用“numberposts”参数,并且您想知道为什么您在列表中只看到5个项目。

默认情况下,你在设置→阅读管理页面中设置的文章数量决定了WordPress查询要检索的文章数量。无论如何,如果你没有为’ numberposts ‘或’ posts_per_page ‘指定一个自定义值,get_posts将返回不同数量的文章。

“Numberposts”是要检索的文章总数。它是winwp _ Query中’ posts_per_page ‘的别名,但两者有区别:默认情况下,使用get_posts时检索的文章数为5,而winwp _ Query中’ posts_per_page ‘默认为WordPress blog的每页文章数。您可以通过在“numberposts”或“posts_per_page”的参数数组中设置自定义值来覆盖默认值。

除了“numberposts”之外,以下参数是get_posts特有的:

“类别”是逗号分隔的类别id列表。它是WP_Query中“cat”参数的别名。

“Include”是以逗号分隔的文章id列表。这是WP_Query中“post__in”参数的别名。

“排除”是以逗号分隔的文章id列表。

‘ Suppress_filters ‘指定是否隐藏过滤器。该参数的默认值为trueinget_posts,默认值为falseinWP_Query(参见Track)。

get_posts函数在wp-includes/posts.php中有定义,Get_posts你可以通过查看Track (WordPress 5.2)或者本地WordPress安装中的源代码来深入了解它的工作原理。

项目排序

“Orderby”或“order”并对结果集中的项目进行排序。你可以通过很多其他方式,按照“id”、“作者”、“标题”、“名称”、“类型”、“日期”、“修改”、“父项”、“rand”和“comment_count”对文章进行升序或降序排序。

如果您有一个简单的查询,您只需要为“order”和“orderby”设置一个值。在以下示例中,文章按文章名称升序排序:

$args = array(‘author’ => ‘1,5,12’,’orderby’ => ‘name’,’order’ => ‘ASC’);

很简单。但是如果您有一个高级查询呢?也就是说,我们可以在高级元查询中通过一个或多个自定义字段值对项目进行排序吗?

WordPress 4.0和WordPress 4.2带来了重要的改进——“order by”和“meta_query”参数。现在我们有了一个新的语法,可以按照元查询的特定子句进行排序。由于新的语法,我们可以使用索引从“orderby”参数创建对元查询的特定子句的引用。

由于这些改进,上面示例中的元查询可以写成如下形式:

$args = array(‘meta_query’ => array(‘relation’ => ‘AND’,’year_clause’ => array(‘key’ => ‘year_published’,’value’ => 2010,’type’ => ‘numeric’,’compare’ => ‘>’,),’price_clause’ => array(‘key’ => ‘price’,’value’ => array( 10, 25 ),’type’ => ‘numeric’,’compare’ => ‘BETWEEN’,)),’orderby’ => ‘price_clause’,);

在上例中,我们对“price_clause”元素进行了排序。

我们可以做得更多。从WordPress 4.0开始,我们可以传递get_posts元查询索引数组,而不是单个索引,如下例所示:

$args = array(‘meta_query’ => array(‘relation’ => ‘AND’,’year_clause’ => array(‘key’ => ‘year_published’,’value’ => 2010,’type’ => ‘numeric’,’compare’ => ‘>’,),’price_clause’ => array(‘key’ => ‘price’,’value’ => array( 10, 25 ),’type’ => ‘numeric’,’compare’ => ‘BETWEEN’,)),’orderby’ => array( ‘price_clause’ => ‘ASC’, ‘year_clause’ => ‘DESC’ ),);

恭喜您,您已经构建了一个高级元查询,并且先按‘price _ clause’升序排序结果,然后再按‘year _ clause’降序排序结果。

在Codex中查看排序选项的完整列表。

是时候在首页显示数据了。

推荐:如何轻松创建和使用phpinfo页面?

如何显示get_posts返回的数据

WordPress的Get_posts返回wp_posts对象的数组,这允许我们访问存储在WP _ posts数据库表中的每篇选定文章的许多变量:

身份证明

帖子_作者

帖子名称

post_type

帖子_标题

发布日期

晚_日期_gmt

帖子_内容

帖子_摘录

帖子_状态

注释_状态

ping _状态

post _密码

post_parent

发布_修改

post_modified_gmt

评论_计数

菜单_订单

phpMyAdmin中的Wp_posts表结构

您可以使用foreach循环轻松访问这些数据,如下所示:

$custom_posts = get_posts( $args );if( ! empty( $custom_posts ) ){$output = ”;foreach ( $custom_posts as $p ){$output .= ” . $p->post_title . ”;}$output .= ”;}return $output ?? ‘Sorry. No posts matching your criteria!’;

如果get_posts找到了至少一篇文章,它将返回一个项目数组,我们可以遍历该数组来显示文章标题和到原始文章的链接。我们使用get_permalink函数来检索文章permalink,因为我们没有相应的WP_Post变量。

这很简单,但是我们如何使用WordPress实现代码并构建我们的自定义文章列表get_posts呢?

您可以用多种方式在页面上显示文章列表。

通过编辑页面模板,您可以在页面的任何位置包含副标题。

您可以将它们包含在侧边栏小工具中。

您可以使用自定义短代码将它们包含在文章的内容中。

真实的例子:如何使用短代码显示自定义项目列表

我将向您展示如何构建一个可以包含在内容中的快速简单的短代码。反正我就不深究短代码了,因为我们在之前的博文里已经介绍过这个话题了。

首先,在本地WordPress安装wp-content/plugins文件夹或临时环境中创建一个新目录。在这个例子中,我将目录命名为wbolt-shortcodes。

创建一个与新目录同名的. php文件:。WP-content/plugins/wbolt-short codes/wbolt-short codes . PHP。

在您喜欢的文本编辑器中打开一个新文件,并包含以下标题:

声明:

1,本站分享的资源来源于用户上传或网络分享,如有侵权请联系站长。

2,本站软件分享目的仅供大家学习和交流,请不要用于商业用途,下载后请于24小时后删除。

3,如果你也有好的建站资源,可以投稿到本站。

4,本站提供的所有资源不包含技术服务请大家谅解!

5,如有链接无法下载,请联系站长!

6,特别声明:仅供参考学习,不提供技术支持,建议购买正版!如果发布资源侵犯了您的利益请留言告知!


创网站长资源网 » 如何使用PHP函数get_posts建立文章列表