134 lines
3.4 KiB
PHP
134 lines
3.4 KiB
PHP
<?php
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly
|
|
}
|
|
|
|
if ( ! class_exists( 'ACF_Taxonomy_Field_Walker' ) ) :
|
|
|
|
class ACF_Taxonomy_Field_Walker extends Walker {
|
|
|
|
/**
|
|
* What the class handles.
|
|
*
|
|
* @since 2.1.0
|
|
* @var string
|
|
*/
|
|
public $tree_type = 'category';
|
|
|
|
/**
|
|
* DB fields to use.
|
|
*
|
|
* @since 2.1.0
|
|
* @var array
|
|
*/
|
|
public $db_fields = array(
|
|
'parent' => 'parent',
|
|
'id' => 'term_id',
|
|
);
|
|
|
|
/**
|
|
* The field being rendered.
|
|
*
|
|
* @since 1.0.0
|
|
* @var array
|
|
*/
|
|
public $field;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @date 20/4/21
|
|
* @since 1.0.0
|
|
*
|
|
* @param array $field The field being rendered.
|
|
* @return void
|
|
*/
|
|
function __construct( $field ) {
|
|
$this->field = $field;
|
|
}
|
|
|
|
/**
|
|
* Starts the list before the elements are added.
|
|
*
|
|
* @see Walker:start_lvl()
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $output Used to append additional content (passed by reference).
|
|
* @param int $depth Depth of category. Used for tab indentation.
|
|
* @param array $args An array of arguments. @see wp_terms_checklist()
|
|
*/
|
|
public function start_lvl( &$output, $depth = 0, $args = array() ) {
|
|
$indent = str_repeat( "\t", $depth );
|
|
$output .= "$indent<ul class='children acf-bl'>\n";
|
|
}
|
|
|
|
/**
|
|
* Ends the list of after the elements are added.
|
|
*
|
|
* @see Walker::end_lvl()
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $output Used to append additional content (passed by reference).
|
|
* @param int $depth Depth of category. Used for tab indentation.
|
|
* @param array $args An array of arguments. @see wp_terms_checklist()
|
|
*/
|
|
public function end_lvl( &$output, $depth = 0, $args = array() ) {
|
|
$indent = str_repeat( "\t", $depth );
|
|
$output .= "$indent</ul>\n";
|
|
}
|
|
|
|
/**
|
|
* Start the element output.
|
|
*
|
|
* @see Walker::start_el()
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $output Used to append additional content (passed by reference).
|
|
* @param WP_Term $term The current term object.
|
|
* @param int $depth Depth of the term in reference to parents. Default 0.
|
|
* @param array $args An array of arguments. @see wp_terms_checklist()
|
|
* @param int $id ID of the current term.
|
|
*/
|
|
public function start_el( &$output, $term, $depth = 0, $args = array(), $id = 0 ) {
|
|
$is_selected = in_array( $term->term_id, $this->field['value'] );
|
|
|
|
// Generate array of checkbox input attributes.
|
|
$input_attrs = array(
|
|
'type' => $this->field['field_type'],
|
|
'name' => $this->field['name'],
|
|
'value' => $term->term_id,
|
|
);
|
|
if ( $is_selected ) {
|
|
$input_attrs['checked'] = true;
|
|
}
|
|
|
|
$output .= "\n" . '<li data-id="' . esc_attr( $term->term_id ) . '">' .
|
|
'<label' . ( $is_selected ? ' class="selected"' : '' ) . '>' .
|
|
'<input ' . acf_esc_attrs( $input_attrs ) . '/> ' .
|
|
'<span>' . acf_esc_html( $term->name ) . '</span>' .
|
|
'</label>';
|
|
}
|
|
|
|
/**
|
|
* Ends the element output, if needed.
|
|
*
|
|
* @see Walker::end_el()
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $output Used to append additional content (passed by reference).
|
|
* @param WP_Term $category The current term object.
|
|
* @param int $depth Depth of the term in reference to parents. Default 0.
|
|
* @param array $args An array of arguments. @see wp_terms_checklist()
|
|
*/
|
|
public function end_el( &$output, $category, $depth = 0, $args = array() ) {
|
|
$output .= "</li>\n";
|
|
}
|
|
}
|
|
|
|
endif;
|