函数文档

build_comment_query_vars_from_block()

💡 云策文档标注

概述

build_comment_query_vars_from_block() 是一个辅助函数,用于从传递的块属性构建评论查询变量数组,主要用于 Comment Query Loop 内部块。

关键要点

  • 函数接受一个 WP_Block 实例作为参数,返回用于 WP_Comment_Query 构造函数的评论查询参数数组。
  • 默认设置包括按 comment_date_gmt 升序排序、状态为 approve,并根据用户登录状态处理未批准评论。
  • 函数会根据块上下文中的 postId 设置 post_id,并根据 WordPress 设置处理评论分页和层级结构。

代码示例

function build_comment_query_vars_from_block( $block ) {
    $comment_args = array(
        'orderby'       => 'comment_date_gmt',
        'order'         => 'ASC',
        'status'        => 'approve',
        'no_found_rows' => false,
    );

    if ( is_user_logged_in() ) {
        $comment_args['include_unapproved'] = array( get_current_user_id() );
    } else {
        $unapproved_email = wp_get_unapproved_comment_author_email();
        if ( $unapproved_email ) {
            $comment_args['include_unapproved'] = array( $unapproved_email );
        }
    }

    if ( ! empty( $block->context['postId'] ) ) {
        $comment_args['post_id'] = (int) $block->context['postId'];
    }

    if ( get_option( 'thread_comments' ) ) {
        $comment_args['hierarchical'] = 'threaded';
    } else {
        $comment_args['hierarchical'] = false;
    }

    if ( get_option( 'page_comments' ) === '1' || get_option( 'page_comments' ) === true ) {
        $per_page     = get_option( 'comments_per_page' );
        $default_page = get_option( 'default_comments_page' );
        if ( $per_page > 0 ) {
            $comment_args['number'] = $per_page;
            $page = (int) get_query_var( 'cpage' );
            if ( $page ) {
                $comment_args['paged'] = $page;
            } elseif ( 'oldest' === $default_page ) {
                $comment_args['paged'] = 1;
            } elseif ( 'newest' === $default_page ) {
                $max_num_pages = (int) ( new WP_Comment_Query( $comment_args ) )->max_num_pages;
                if ( 0 !== $max_num_pages ) {
                    $comment_args['paged'] = $max_num_pages;
                }
            }
        }
    }

    return $comment_args;
}

注意事项

  • 函数在 WordPress 6.0.0 版本中引入,使用时需确保版本兼容性。
  • 返回的数组可直接传递给 WP_Comment_Query 构造函数以执行评论查询。
  • 函数依赖于多个 WordPress 核心函数,如 get_option() 和 get_query_var(),确保这些函数可用。

📄 原文内容

Helper function that constructs a comment query vars array from the passed block properties.

Description

It’s used with the Comment Query Loop inner blocks.

Parameters

$blockWP_Blockrequired
Block instance.

Return

array Returns the comment query parameters to use with the WP_Comment_Query constructor.

Source

function build_comment_query_vars_from_block( $block ) {

	$comment_args = array(
		'orderby'       => 'comment_date_gmt',
		'order'         => 'ASC',
		'status'        => 'approve',
		'no_found_rows' => false,
	);

	if ( is_user_logged_in() ) {
		$comment_args['include_unapproved'] = array( get_current_user_id() );
	} else {
		$unapproved_email = wp_get_unapproved_comment_author_email();

		if ( $unapproved_email ) {
			$comment_args['include_unapproved'] = array( $unapproved_email );
		}
	}

	if ( ! empty( $block->context['postId'] ) ) {
		$comment_args['post_id'] = (int) $block->context['postId'];
	}

	if ( get_option( 'thread_comments' ) ) {
		$comment_args['hierarchical'] = 'threaded';
	} else {
		$comment_args['hierarchical'] = false;
	}

	if ( get_option( 'page_comments' ) === '1' || get_option( 'page_comments' ) === true ) {
		$per_page     = get_option( 'comments_per_page' );
		$default_page = get_option( 'default_comments_page' );
		if ( $per_page > 0 ) {
			$comment_args['number'] = $per_page;

			$page = (int) get_query_var( 'cpage' );
			if ( $page ) {
				$comment_args['paged'] = $page;
			} elseif ( 'oldest' === $default_page ) {
				$comment_args['paged'] = 1;
			} elseif ( 'newest' === $default_page ) {
				$max_num_pages = (int) ( new WP_Comment_Query( $comment_args ) )->max_num_pages;
				if ( 0 !== $max_num_pages ) {
					$comment_args['paged'] = $max_num_pages;
				}
			}
		}
	}

	return $comment_args;
}

Changelog

Version Description
6.0.0 Introduced.