当前浏览:首页 / WordPress函数 / get_children()

get_children( mixed $args = '', string $output = OBJECT )

检索给定父文章ID的所有子项

children


描述

通常,在没有任何增强的情况下,子级将适用于页面。在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开始引入

使用示例

  • 示例1

    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)
    }

  • 示例2

    显示与文章相关的第一个图像

    此函数用于检索与文章相关联的第一个图像

    <?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" />';
    		}
    	}
    }
    
  • 示例3

    显示与文章相关的第一个图像,并重新设置数组的关键帧

    在上面的例子中,一个主数组是用图像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.
    
  • 示例4

    获取所有父文章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;
    }
    
  • 示例5

    这对于从文章中提取第一个图像是不安全的

    正如所给的名称一样,该函数实际上从父对象返回子对象。这意味着,如果你在新文章中重复使用图像,它将不会返回图像。例如:

    首先,创建一篇新文章A并上传这些图片A01.jpg,A02.jpg和A03.jpg到文章A。然后这些图片,或者说附件(A01、A02、A03)是文章A的子项。有了它,我们可以从循环中的文章A中检索图像A01。这是一种常见的替换缩略图的方法,以防作者忘记添加缩略图。但是如果我们再发一篇文章呢?

    让我们创建第二篇文章B并重用文章A上传的图像(A01和A02)。在这种情况下,不会从get_children返回任何图像,因为图像A01和A02不是文章B的子对象。这意味着如果我们的主题设计肯定会被打破,因为在索引页面中的文章上没有可显示的图像。除非主题是针对特定情况设计的,并为用户提供了仔细的指导,否则此功能不应用于从文章中检索图像!

    &lt;?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);
    }
    
      结果:

    1. 文章 A (上传图片:A1, A2, A3):图片 A1
    2. 文章 B (重用的图片:A1, A2): NULL
    3. 文章 C (重用的图片:A1) (上传图片:C1, C2, C3):图片 C1 (即使图片A1被放在上面,图片C1仍然会被返回,因为A1不是文章 C的子级。)
  • 示例6

    要仅获取子ID数组,请在函数args数组中传递 ‘fields’ => ‘ids’

    get_children( [
    	'post_parent' 	=> $post_id,
    	'fields'        => 'ids',
    ] );
    
  • 示例7

    示例

    如果您只想获取或显示附件,那么使用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 );
    }