函数文档

wxr_authors_list()

💡 云策文档标注

概述

wxr_authors_list() 是一个 WordPress 函数,用于输出有文章的作者列表,常用于 WXR 导出功能。它通过查询数据库获取作者信息,并支持通过文章 ID 数组进行过滤。

关键要点

  • 函数接受一个可选的 $post_ids 参数,类型为整数数组,用于筛选特定文章的作者,默认值为 null。
  • 内部使用 $wpdb->get_results() 执行 SQL 查询,获取非自动草稿状态的文章作者 ID。
  • 通过 get_userdata() 获取作者详细信息,并输出为 XML 格式,包括 ID、登录名、邮箱、显示名、名字和姓氏。
  • 函数在 3.1.0 版本中引入,主要用于 export_wp() 函数以生成 WXR 导出文件。

代码示例

function wxr_authors_list( ?array $post_ids = null ) {
    global $wpdb;

    if ( ! empty( $post_ids ) ) {
        $post_ids       = array_map( 'absint', $post_ids );
        $post_id_chunks = array_chunk( $post_ids, 20 );
    } else {
        $post_id_chunks = array( array() );
    }

    $authors = array();

    foreach ( $post_id_chunks as $next_posts ) {
        $and = ! empty( $next_posts ) ? 'AND ID IN (' . implode( ', ', $next_posts ) . ')' : '';

        $results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft' $and" );

        foreach ( (array) $results as $result ) {
            $authors[] = get_userdata( $result->post_author );
        }
    }

    $authors = array_filter( $authors );
    $authors = array_unique( $authors, SORT_REGULAR ); // Remove duplicate authors.

    foreach ( $authors as $author ) {
        echo "t";
        echo '' . (int) $author->ID . '';
        echo '' . wxr_cdata( $author->user_login ) . '';
        echo '' . wxr_cdata( $author->user_email ) . '';
        echo '' . wxr_cdata( $author->display_name ) . '';
        echo '' . wxr_cdata( $author->first_name ) . '';
        echo '' . wxr_cdata( $author->last_name ) . '';
        echo "n";
    }
}

注意事项

  • 函数依赖于全局 $wpdb 对象进行数据库查询,确保在调用前已正确初始化。
  • 输出格式为 XML,使用 wxr_cdata() 包装字符串以符合 CDATA 标准,适用于 WXR 导出场景。
  • 参数 $post_ids 会被转换为整数并分块处理(每块 20 个 ID),以提高查询效率。
  • 函数仅返回有非自动草稿文章的作者,重复作者会被自动过滤。

📄 原文内容

Outputs list of authors with posts.

Parameters

$post_idsint[]optional
Array of post IDs to filter the query by.

Default:null

Source

function wxr_authors_list( ?array $post_ids = null ) {
	global $wpdb;

	if ( ! empty( $post_ids ) ) {
		$post_ids       = array_map( 'absint', $post_ids );
		$post_id_chunks = array_chunk( $post_ids, 20 );
	} else {
		$post_id_chunks = array( array() );
	}

	$authors = array();

	foreach ( $post_id_chunks as $next_posts ) {
		$and = ! empty( $next_posts ) ? 'AND ID IN (' . implode( ', ', $next_posts ) . ')' : '';

		$results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft' $and" );

		foreach ( (array) $results as $result ) {
			$authors[] = get_userdata( $result->post_author );
		}
	}

	$authors = array_filter( $authors );
	$authors = array_unique( $authors, SORT_REGULAR ); // Remove duplicate authors.

	foreach ( $authors as $author ) {
		echo "t<wp:author>";
		echo '<wp:author_id>' . (int) $author->ID . '</wp:author_id>';
		echo '<wp:author_login>' . wxr_cdata( $author->user_login ) . '</wp:author_login>';
		echo '<wp:author_email>' . wxr_cdata( $author->user_email ) . '</wp:author_email>';
		echo '<wp:author_display_name>' . wxr_cdata( $author->display_name ) . '</wp:author_display_name>';
		echo '<wp:author_first_name>' . wxr_cdata( $author->first_name ) . '</wp:author_first_name>';
		echo '<wp:author_last_name>' . wxr_cdata( $author->last_name ) . '</wp:author_last_name>';
		echo "</wp:author>n";
	}
}

Changelog

Version Description
3.1.0 Introduced.