Intereting Posts
media_handle_upload не работает с изображением гравитационной формы Ошибка базы данных WordPress с использованием $ wpdb-> get_results () Содержимое короткого кода не отображается в описании / выписке Как настроить встроенное меню в WordPress? Изменить регистрационную форму WooCommerce / способ? Рекомендуемый размер носителя для двадцати четырнадцати Повторяемые поля Metabox с Textarea (или wp_editor) Woocommerce Добавить вариант продукта в корзину по специальной ссылке Как выбрать порядок сортировки (для сообщений) для каждой категории? (в идеале при создании новой категории) Кажется, не фильтрует wp_query по идентификатору текущей категории Показывать разные страницы на сайте в зависимости от выбора пользователя Обязательные поля в пользовательских типах сообщений Лучший способ переноса WordPress в корневой каталог, когда я готов к запуску? Linkedin не возвращает правильную информацию Добавление блока с запросом на главной странице

Как можно улучшить эту грубую функцию?

В первой функции ниже внутри foreach я вызываю вторую функцию, чтобы проверить наличие соответствующих идентификаторов категорий, которые я хочу удалить из списка категорий.

Однако то, как я делаю это во 2-й функции, кажется мне очень грубым из-за отсутствия лучшего термина. Как я мог улучшить этот поиск?

function admin_trim_category_description( $terms, $taxonomies ) { if( 'category' != $taxonomies[0] )return $terms; foreach( $terms as $key=>$term ) { $terms[$key]->description = strip_tags(substr( $term->description, 0, 75 ))."..."; if(ce4_get_utility_cats($terms[$key]->term_id)) { unset($terms[$key]); } } return $terms; } function ce4_get_utility_cats($cat_id) { if($cat_id == get_cat_ID('category1') OR $cat_id == get_cat_ID('hidden') OR $cat_id == get_cat_ID('category2') OR $cat_id == get_cat_ID('category3')) { return true; } else { return false; } } 

EDIT: Вышеупомянутые функции вызываются следующим образом …

 add_action( 'admin_head-edit-tags.php', 'admin_edit_tags' ); function admin_edit_tags(){ add_filter( 'get_terms', 'admin_trim_category_description', 10, 2 ); } 

 function admin_trim_category_description( $terms, $taxonomies ){ if( 'category' != $taxonomies[0] )return $terms; $whatever_categories = array('category1', 'hidden', 'category2', 'category3'); foreach( $terms as $key => $term) if(!in_array($terms[$key]->name, $whatever_categories)) $terms[$key]->description = strip_tags(substr( $term->description, 0, 75 ))."..."; else unset($terms[$key]); return $terms; } 

Единственное, что я вижу, что явно неэффективно, – это то, что вы вызываете get_cat_ID для каждой категории для каждого термина. Это запрос db для каждого вызова функции.

Было бы более эффективно вызывать эти функции перед foreach и помещать их в массив, отправленный как параметр функции.

Возможно, попробуйте добавить термины, которые вы проверяете, в массив, а затем просто проверьте, есть ли $ cat_id в массиве. Я хочу сказать, что есть функции, подобные этому, но я не могу их отличить. Это устранит необходимость в OR