acf_field_relationship::render_field()publicACF 3.6

Create the HTML interface for your field

Метод класса: acf_field_relationship{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$acf_field_relationship = new acf_field_relationship();
$acf_field_relationship->render_field( $field );
$field (обязательный)
-

Список изменений

С версии 3.6 Введена.

Код acf_field_relationship::render_field() ACF 6.0.4

<?php
function render_field( $field ) {

	// vars
	$post_type = acf_get_array( $field['post_type'] );
	$taxonomy  = acf_get_array( $field['taxonomy'] );
	$filters   = acf_get_array( $field['filters'] );

	// filters
	$filter_count             = count( $filters );
	$filter_post_type_choices = array();
	$filter_taxonomy_choices  = array();

	// post_type filter
	if ( in_array( 'post_type', $filters ) ) {

		$filter_post_type_choices = array(
			'' => __( 'Select post type', 'acf' ),
		) + acf_get_pretty_post_types( $post_type );
	}

	// taxonomy filter
	if ( in_array( 'taxonomy', $filters ) ) {

		$term_choices            = array();
		$filter_taxonomy_choices = array(
			'' => __( 'Select taxonomy', 'acf' ),
		);

		// check for specific taxonomy setting
		if ( $taxonomy ) {
			$terms        = acf_get_encoded_terms( $taxonomy );
			$term_choices = acf_get_choices_from_terms( $terms, 'slug' );

			// if no terms were specified, find all terms
		} else {

			// restrict taxonomies by the post_type selected
			$term_args = array();
			if ( $post_type ) {
				$term_args['taxonomy'] = acf_get_taxonomies(
					array(
						'post_type' => $post_type,
					)
				);
			}

			// get terms
			$terms        = acf_get_grouped_terms( $term_args );
			$term_choices = acf_get_choices_from_grouped_terms( $terms, 'slug' );
		}

		// append term choices
		$filter_taxonomy_choices = $filter_taxonomy_choices + $term_choices;

	}

	// div attributes
	$atts = array(
		'id'             => $field['id'],
		'class'          => "acf-relationship {$field['class']}",
		'data-min'       => $field['min'],
		'data-max'       => $field['max'],
		'data-s'         => '',
		'data-paged'     => 1,
		'data-post_type' => '',
		'data-taxonomy'  => '',
	);

	?>
<div <?php echo acf_esc_attrs( $atts ); ?>>
	
	<?php
	acf_hidden_input(
		array(
			'name'  => $field['name'],
			'value' => '',
		)
	);
	?>
	
	<?php

	/* filters */
	if ( $filter_count ) :
		?>
	<div class="filters -f<?php echo esc_attr( $filter_count ); ?>">
		<?php

		/* search */
		if ( in_array( 'search', $filters ) ) :
			?>
<div class="filter -search">
			<?php
			acf_text_input(
				array(
					'placeholder' => __( 'Search...', 'acf' ),
					'data-filter' => 's',
				)
			);
			?>
</div>
			<?php
	endif;

		/* post_type */
		if ( in_array( 'post_type', $filters ) ) :
			?>
<div class="filter -post_type">
			<?php
			acf_select_input(
				array(
					'choices'     => $filter_post_type_choices,
					'data-filter' => 'post_type',
				)
			);
			?>
</div>
			<?php
	endif;

		/* post_type */
		if ( in_array( 'taxonomy', $filters ) ) :
			?>
<div class="filter -taxonomy">
			<?php
			acf_select_input(
				array(
					'choices'     => $filter_taxonomy_choices,
					'data-filter' => 'taxonomy',
				)
			);
			?>
</div>
		<?php endif; ?>		
	</div>
	<?php endif; ?>
	
	<div class="selection">
<div class="choices">
	<ul class="acf-bl list choices-list"></ul>
</div>
<div class="values">
	<ul class="acf-bl list values-list">
		<?php
		if ( ! empty( $field['value'] ) ) :

			// get posts
			$posts = acf_get_posts(
				array(
					'post__in'  => $field['value'],
					'post_type' => $field['post_type'],
				)
			);

				// loop
			foreach ( $posts as $post ) :
				?>
			<li>
				<?php
					acf_hidden_input(
						array(
							'name'  => $field['name'] . '[]',
							'value' => $post->ID,
						)
					);
				?>
				<span tabindex="0" data-id="<?php echo esc_attr( $post->ID ); ?>" class="acf-rel-item acf-rel-item-remove">
						<?php echo acf_esc_html( $this->get_post_title( $post, $field ) ); ?>
					<a href="#" class="acf-icon -minus small dark" data-name="remove_item"></a>
				</span>
			</li>
				<?php endforeach; ?>
		<?php endif; ?>
	</ul>
</div>
	</div>
</div>
	<?php
}