Я хотел установить родителя категории для таксономии "job_listing_category" как optgroup, если у него есть дочерние элементы. Как и this !
Мне удалось это исправить, заменив основной файл плагина WP Job Manager class-wp-job-manager-category-walker. php с:
<?php
/**
* File containing the class WP_Job_Manager_Category_Walker.
*
* @package wp-job-manager
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Walks through categories.
*
* @extends Walker
* @package wp-job-manager
* @since 1.0.0
*/
class My_WP_Job_Manager_Category_Walker extends WP_Job_Manager_Category_Walker {
/**
* Tree type that the class handles.
*
* @var string
*/
public $tree_type = 'category';
/**
* Database fields to use.
*
* @var array
*/
public $db_fields = [
'parent' => 'parent',
'id' => 'term_id',
'slug' => 'slug',
];
function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
$pad = str_repeat(' ', $depth * 3);
$cat_name = apply_filters('list_cats', $category->name, $category);
if ('list' == $args['has_children'] && $args['taxonomy'] == 'job_listing_category'){
// $this->optgroup = true;
$output .= "<optgroup class=\"level-$depth\" label=\"".$cat_name."\" >";
} else {
$output .= "<option class=\"level-$depth\" value=\"".$category->term_id."\"";
if ( $category->term_id == $args['selected'] )
$output .= ' selected="selected"';
$output .= '>';
$output .= $pad.$cat_name;
if ( $args['show_count'] )
$output .= ' ('. $category->count .')';
$output .= "</option>";
}
}
function end_el(&$output,$object,$depth) {
if ('list' == $args['has_children'] && $args['taxonomy'] == 'job_listing_category') {
$output .= '</optgroup>';
}
}
}
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что ее можно перезаписать всякий раз, когда плагин администратора заданий WP будет обновлен!
Поэтому Я пытался следовать предложению , чтобы исправить эту проблему, но пока ни одно из предложений не работает. Возможно, у меня неправильный фильтр.
function wp_job_manager_optgroup_parent_category( $args ){
// include new walker class - where ever you saved/named it
//include_once( 'wp-job-manager/class-wp-job-manager-categroy-walker.php' );
// set the name as the new walker for the widget args
$args['walker'] = new My_WP_Job_Manager_Category_Walker;
return $args;
}
add_filter( 'job_manager_job_filters_search_jobs_start', 'wp_job_manager_optgroup_parent_category' );
также пробовал следующие фильтры:
- job_manager_job_filters_search_jobs_start
- job_manager_job_filters_before
- job_manager_term_multiselect_field_args
- job_manager_dropdown_categories
Есть предложения, как это исправить?