get_block_templates() WP 5.8.0

Отримує список об’єктів уніфікованого шаблону на основі запиту.

Повертає

Массив. Templates.

Використання

get_block_templates ( $query , $template_type );
$query (масив)
Arguments to retrieve templates.

За замовчуванням: array()

  • slug__in (масив)
    List of slugs to include.
  • wp_id (int)
    Post ID customized template.
  • area (рядок)
    A ‘wp_template_part_area’ taxonomy value to filter by (для wp_template_part template type only).
  • post_type (рядок)
    Post type to get the templates for.
$template_type (рядок)
‘wp_template’ або ‘wp_template_part’ .

За замовчуванням: ‘wp_template’

список змін

З версії 5.8.0Введено.

Код get_block_templates() WP 6.2

function  get_block_templates ( $query = array ( ), $template_type = 'wp_template'  ) {
	 /**
	 * Filters block templates array before the query takes place.
	 *
	 * Return a non-null value to bypass the WordPress queries.
	 *
	 * @ Since 5.9.0
	 *
	 * @param WP_Block_Template[]|null $block_templates Відновити array of block templates to short-circuit the default query,
	 * або null to allow WP to run it's normal queries.
	 * @param array $query {
	 * Optional. Arguments to retrieve templates.
	 *
	 * @type array $slug__in List of slugs to include.
	 * @type int $wp_id Post ID customized template.
	 * @type string $post_type Post type to get the templates for.
	 * }
	 * @param string $template_type wp_template або wp_template_part.
	 */ 
	$templates = apply_filters ( 'pre_get_block_templates' , null , $query , $template_type );
	if (! is_null ( $templates )) {
		 return  $templates ;
	}

	$post_type = isset ( $query [ 'post_type' ])? $query [ 'post_type' ] : '' ;
	$wp_query_args = array (
		 ' post_status' => array ( 'auto-draft' , 'draft' , 'publish' ),
		 'post_type' => $template_type ,
		 '
		 posts_per_page' => - 1 ,
		 'no_found_rows' => 'tax_query' =>(
				 'taxonomy' => 'wp_theme' ,
				 'field' => 'name' ,
				 'terms' => get_stylesheet (),
			),
		),
	);

	if ( 'wp_template_part' === $template_type && isset ( $query [ 'area' ] ) ) {
		 $wp_query_args [ 'tax_query' ][] = array (
			 'taxonomy' => ' wp_template_part_area ' ,
			 ' name' ,
			 'terms' => $query [ 'area' ],
		);
		$wp_query_args [ 'tax_query' ][ 'relation' ] = 'AND' ;
	}

	if ( isset ( $query [ 'slug__in' ]))) {
		 $wp_query_args [ 'post_name__in' ] = $query [ 'slug__in' ];
	}

	// Це не тільки необхідно для регулярних templates/template parts post type listing and editor. 
	if ( isset ( $query [ 'wp_id' ]))) {
		 $wp_query_args [ 'p' ] = $query [ 'wp_id' ];
	} else {
		 $wp_query_args [ 'post_status' ] = 'publish' ;
	}

	$template_query = новий WP_Query ( $wp_query_args );
	$query_result = array ();
	foreach ( $template_query ->posts as  $post ) {
		 $template = _build_block_template_result_from_post ( $post );

		if ( is_wp_error ( $template )) {
			 continue ;
		}

		if ( $post_type && ! $template ->is_custom ) {
			 continue ;
		}

		if (
			 $post_type &&
			 isset ( $template ->post_types ) &&
			! in_array ( $post_type , $template ->post_types, true )
		) {
			continue ;
		}

		$query_result [] = $template ;
	}

	if ( ! isset ( $query [ 'wp_id' ] ) ) {
		 $template_files = _get_block_templates_files ( $template_type );
		foreach ( $template_files  as  $template_file ) {
			 $template = _build_block_template_result_from_file ( $template_file , $template_type );

			if ( $post_type && ! $template ->is_custom ) {
				 continue ;
			}

			if ( $post_type &&
				 isset ( $template ->post_types ) &&
				! in_array ( $post_type , $template ->post_types, true )
			) {
				continue ;
			}

			$is_not_custom = false === array_search (
				 get_stylesheet (). '//' . $template_file [ 'slug' ],
				 wp_list_pluck ( $query_result , 'id' ),
				 true
			);
			$fits_slug_query =
				! isset ( $query [ 'slug__in' ]) || in_array ( $template_file [ 'slug' ], $query [ 'slug__in' ], true );
			$fits_area_query =
				! isset ( $query [ 'area' ]) || $template_file [ 'area' ] === $query [ 'area' ];
			$should_include = $is_not_custom && $fits_slug_query && $fits_area_query ;
			if ( $should_include ) {
				 $query_result [] = $template ;
			}
		}
	}

	/**
	 * Filters array of queried block templates array після they've been fetched.
	 *
	 * @ Since 5.9.0
	 *
	 * @param WP_Block_Template[] $query_result Array of found block templates.
	 * @param array $query {
	 * Optional. Arguments to retrieve templates.
	 *
	 * @type array $slug__in List of slugs to include.
	 * @type int $wp_id Post ID customized template.
	 * }
	 * @param string $template_type wp_template або wp_template_part.
	 */ 
	return  apply_filters ( 'get_block_templates' , $query_result , $query , $template_type );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *