函数文档

wp_find_hierarchy_loop()

💡 云策文档标注

概述

wp_find_hierarchy_loop() 是一个 WordPress 核心函数,用于检测层次结构中的循环依赖。它通过回调函数映射对象 ID 到父 ID,并返回循环中所有成员的 ID 数组。

关键要点

  • 函数接受一个回调函数 $callback,用于获取对象的父 ID。
  • 参数 $start 指定开始检查循环的 ID,$start_parent 可指定 $start 的父 ID 以覆盖回调。
  • 返回值为数组,包含循环中所有成员的 ID;若无循环则返回空数组。
  • 内部使用 wp_find_hierarchy_loop_tortoise_hare() 函数,基于“龟兔赛跑”算法检测循环。
  • 常用于检查术语或文章层次结构中的循环,如 wp_check_term_hierarchy_for_loops() 和 wp_check_post_hierarchy_for_loops()。

代码示例

function wp_find_hierarchy_loop( $callback, $start, $start_parent, $callback_args = array() ) {
	$override = is_null( $start_parent ) ? array() : array( $start => $start_parent );

	$arbitrary_loop_member = wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override, $callback_args );
	if ( ! $arbitrary_loop_member ) {
		return array();
	}

	return wp_find_hierarchy_loop_tortoise_hare( $callback, $arbitrary_loop_member, $override, $callback_args, true );
}

📄 原文内容

Finds hierarchy loops using a callback function that maps object IDs to parent IDs.

Parameters

$callbackcallablerequired
Function that accepts ( ID, $callback_args ) and outputs parent_ID.
$startintrequired
The ID to start the loop check at.
$start_parentintrequired
The parent_ID of $start to use instead of calling $callback( $start ).
Use null to always use $callback.
$callback_argsarrayoptional
Additional arguments to send to $callback.

Default:array()

Return

array IDs of all members of loop.

Source

function wp_find_hierarchy_loop( $callback, $start, $start_parent, $callback_args = array() ) {
	$override = is_null( $start_parent ) ? array() : array( $start => $start_parent );

	$arbitrary_loop_member = wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override, $callback_args );
	if ( ! $arbitrary_loop_member ) {
		return array();
	}

	return wp_find_hierarchy_loop_tortoise_hare( $callback, $arbitrary_loop_member, $override, $callback_args, true );
}

Changelog

Version Description
3.1.0 Introduced.