/home/nbcgowuy/kdosheleads.com/wp-content/plugins/dokan-lite/includes/Walkers/TaxonomyDropdown.php
<?php
namespace WeDevs\Dokan\Walkers;
use Walker;
class TaxonomyDropdown extends Walker {
/**
* @see Walker::$tree_type
*
* @var string
*/
public $tree_type = 'category';
/**
* @see Walker::$db_fields
*
* @var array
*/
public $db_fields = [
'parent' => 'parent',
'id' => 'term_id',
];
/**
* Post id
*
* @var int
*/
private $post_id = '';
/**
* Constructor method
*
* @param int $post_id
*/
public function __construct( $post_id = 0 ) {
$this->post_id = $post_id;
}
/**
* Override display_element method to add additional validation
*
* @param object $element Data object.
* @param array $children_elements List of elements to continue traversing.
* @param int $max_depth Max depth to traverse.
* @param int $depth Depth of current element.
* @param array $args An array of arguments.
* @param string $output Used to append additional content.
*/
public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
// Validate element is an object before accessing properties
if ( ! $element ) {
return;
}
// Check if the required ID field exists
$id_field = $this->db_fields['id'] ?? 0;
if ( ! isset( $element->$id_field ) ) {
return;
}
// Now call the parent method which will properly handle valid elements
parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
/**
* Start element
*
* @param string $output
* @param object $category
* @param int $depth
* @param array $args
* @param int $id
*
* @return void
*/
public function start_el( &$output, $category, $depth = 0, $args = [], $id = 0 ) {
$taxonomy = isset( $category->taxonomy ) ? $category->taxonomy : '';
if ( ! taxonomy_exists( $taxonomy ) ) {
dokan_log( 'Taxonomy does not exist: ' . $taxonomy );
return;
}
// Check if term_id exists
if ( ! isset( $category->term_id ) ) {
return;
}
$pad = str_repeat( ' —', $depth * 1 );
$cat_name = apply_filters( 'list_cats', $category->name, $category );
$output .= "<option class=\"level-$depth\" value=\"" . $category->term_id . '"';
$selected = is_array( $args['selected'] ) ? $args['selected'] : (array) $args['selected'];
$selected = array_map( 'intval', $selected );
if ( in_array( $category->term_id, $selected, true ) ) {
$output .= ' selected="selected"';
}
$output .= '>';
$output .= $pad . ' ' . $cat_name;
if ( $args['show_count'] ) {
$output .= ' (' . $category->count . ')';
}
$output .= "</option>\n";
}
}