描述
通常,在没有任何增强的情况下,子级将适用于页面。在WordPress的内部工作环境中,页面、文章和附件共享同一个表格,因此,这个功能可以适用于其中的任何一个。需要注意的是,虽然这个函数对文章不起作用,但并不意味着它对文章不会起作用。建议你先了解你希望检索的是什么上下文的子项。
附件也可能成为文章的子项,因此如果这是一个准确的声明(需要验证),那么就有可能获得文章的所有附件。自2.5版以来,附件已经更改,因此这很可能不准确,但通常作为一个可能的示例。
作为默认值列出的参数适用于此函数以及get_posts()函数。参数与get_children默认值组合,然后传递给get_posts()函数,该函数接受其他参数。您可以替换下面列出的此函数中的默认值和get_posts()函数中列出的其他参数。
“post_parent”是最重要的参数,需要重点关注$args参数。如果传递一个对象或整数(数字),则只抓取“post_parent”,其他所有内容都将丢失。如果没有指定任何参数,则假设您是在循环中,并且将从当前文章中获取文章父级。
“post_parent”参数是获取子项的ID。“numberposts”是要检索的文章数量,默认值为“-1”,用于获取所有文章。给出一个大于0的数字只会检索到该数量的文章。
“post_type”和“post_status”参数可用于选择要检索的文章的标准。“post_type”可以是任何类型,但WordPress的文章类型是“post”、“page”和“attachments”。“post_status”参数将接受写入管理面板中的任何文章状态。
另见
参数
- $args
-
(mixed) (可选) 用于替换默认值的用户定义参数。
默认值: ''
- $output
-
(string) (可选) 所需的返回类型。OBJECT、ARRAY_A或ARRAY_N的一个,分别对应于WP_Post对象、关联数组或数字数组。
默认值: OBJECT
返回
(WP_Post[]|int[]) post对象或post ID的数组。
源码
更新日志
版本 | 描述 |
---|---|
2.0.0 | 开始引入 |
使用示例
get_children()
返回的每个项目都有以下值(显示的名称从ARRAY_A
映射;相同的名称与OBJECT
一起使用):array(24) {
["ID"] => (int)
["post_author"] => (string)
["post_date"] => (string)
["post_date_gmt"] => (string)
["post_content"] => (string)
["post_title"] => (string)
["post_excerpt"] => (string)
["post_status"] => (string)
["comment_status"] => (string)
["ping_status"] => (string)
["post_password"] => (string)
["post_name"] => (string)
["to_ping"] => (string)
["pinged"] => (string)
["post_modified"] => (string)
["post_modified_gmt"] => (string)
["post_content_filtered"] => (string)
["post_parent"] => (int)
["guid"] => (string)
["menu_order"] => (int)
["post_type"] => (string)
["post_mime_type"] => (string)
["comment_count"] => (string)
["filter"] => (string)
}显示与文章相关的第一个图像
此函数用于检索与文章相关联的第一个图像
<?php /** * Echo first image (if available). * * @param int $post_id Post ID. */ function wpdocs_echo_first_image( $post_id ) { $args = array( 'posts_per_page' => 1, 'order' => 'ASC', 'post_mime_type' => 'image', 'post_parent' => $post_id, 'post_status' => null, 'post_type' => 'attachment', ); $attachments = get_children( $args ); if ( $attachments ) { foreach ( $attachments as $attachment ) { $image_attributes = wp_get_attachment_image_src( $attachment->ID, 'thumbnail' ) ? wp_get_attachment_image_src( $attachment->ID, 'thumbnail' ) : wp_get_attachment_image_src( $attachment->ID, 'full' ); echo '<img src="' . esc_url( wp_get_attachment_thumb_url( $attachment->ID ) ) . '" class="current" />'; } } }
显示与文章相关的第一个图像,并重新设置数组的关键帧
在上面的例子中,一个主数组是用图像ID(正是正在寻找的东西-因为我们不知道它-我们应该如何访问它?)。下面的代码为图像信息提供了更简单的处理:数组$child_image。应在循环中使用。
$args = array( 'posts_per_page' => 1, 'order' => 'DESC', 'post_mime_type' => 'image', 'post_parent' => $post->ID, 'post_type' => 'attachment' ); $get_children_array = get_children( $args,ARRAY_A ); //returns Array ( [$image_ID]. $rekeyed_array = array_values( $get_children_array ); $child_image = $rekeyed_array[0]; print_r( $child_image ); //Show the contents of the $child_image array. echo $child_image['ID']; //Show the $child_image ID.
获取所有父文章ID
$post_type ="post"; //page, or custom_post_type $post_status = "any"; //publish, draft, etc $num_of_posts = -1; // -1 for all, or amount # to return $post_parent = 0; //0 for parents, or and id $args = array('post_parent' => 0, 'post_type' => $post_type, 'numberposts' => $num_of_posts, 'post_status' => $post_status); $parents = get_children($args); foreach ($parents as $parent) { echo "<br>ParentID: ".$parent->ID; }
这对于从文章中提取第一个图像是不安全的
正如所给的名称一样,该函数实际上从父对象返回子对象。这意味着,如果你在新文章中重复使用图像,它将不会返回图像。例如:
首先,创建一篇新文章A并上传这些图片A01.jpg,A02.jpg和A03.jpg到文章A。然后这些图片,或者说附件(A01、A02、A03)是文章A的子项。有了它,我们可以从循环中的文章A中检索图像A01。这是一种常见的替换缩略图的方法,以防作者忘记添加缩略图。但是如果我们再发一篇文章呢?
让我们创建第二篇文章B并重用文章A上传的图像(A01和A02)。在这种情况下,不会从
get_children
返回任何图像,因为图像A01和A02不是文章B的子对象。这意味着如果我们的主题设计肯定会被打破,因为在索引页面中的文章上没有可显示的图像。除非主题是针对特定情况设计的,并为用户提供了仔细的指导,否则此功能不应用于从文章中检索图像!<?php function print_first_kid_image_of_post($post_id) { $arr = array( 'posts_per_page' => 1, # This param ensures only 1 post returned in the array 'post_mime_type' => 'image', 'post_parent' => $post_id, 'post_type' => 'attachment', ); $imgs = get_children($arr); # Return an array with an item $img = $imgs[0]; $img_id = $img->ID; $img_size = 'thumbnail' echo wp_get_attachment_image($img_id, $img_size); }
-
结果:
- 文章 A (上传图片:A1, A2, A3):图片 A1
- 文章 B (重用的图片:A1, A2): NULL
- 文章 C (重用的图片:A1) (上传图片:C1, C2, C3):图片 C1 (即使图片A1被放在上面,图片C1仍然会被返回,因为A1不是文章 C的子级。)
要仅获取子ID数组,请在函数args数组中传递 ‘fields’ => ‘ids’
get_children( [ 'post_parent' => $post_id, 'fields' => 'ids', ] );
示例
如果您只想获取或显示附件,那么使用get_posts()可能会更容易一些。
$images =& get_children( array( 'post_type' => 'attachment', 'post_mime_type' => 'image' ); $videos =& get_children( array( 'post_type' => 'attachment', 'post_mime_type' => 'video/mp4' ); if ( empty( $images ) ) { // no attachments here } else { foreach ( $images as $attachment_id => $attachment ) { echo wp_get_attachment_image( $attachment_id, 'full' ); } } // If you don't need to handle an empty result: foreach ( (array) $videos as $attachment_id => $attachment ) { echo wp_get_attachment_link( $attachment_id ); }