¿Cómo se puede mejorar esta función rudimentaria?
En la primera función a continuación, dentro del foreach, estoy llamando a la segunda función para probar la ocurrencia de IDs de categoría coincidentes que quiero eliminar de la lista de categorías.
Sin embargo, la forma en que lo estoy haciendo en la segunda función me parece bastante rudimentaria, por falta de un término mejor. ¿Cómo podría mejorar esta búsqueda?
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;
}
}
EDITADO: Las funciones anteriores se llaman de la siguiente manera...
add_action( 'admin_head-edit-tags.php', 'admin_edit_tags' );
function admin_edit_tags(){
add_filter( 'get_terms', 'admin_trim_category_description', 10, 2 );
}
/**
* Función para recortar la descripción de categorías en el área de administración
* y filtrar categorías específicas
*/
function admin_trim_category_description( $terms, $taxonomies ){
// Verificar si estamos trabajando con la taxonomía 'category'
if( 'category' != $taxonomies[0] ) return $terms;
// Lista de categorías que queremos excluir
$categorias_excluidas = array('category1', 'oculto', 'category2', 'category3');
// Recorrer todos los términos (categorías)
foreach( $terms as $key => $term) {
// Si la categoría no está en la lista de excluidas
if(!in_array($terms[$key]->name, $categorias_excluidas)) {
// Recortar la descripción a 75 caracteres y eliminar etiquetas HTML
$terms[$key]->description = strip_tags(substr( $term->description, 0, 75 ))."...";
} else {
// Eliminar la categoría completamente si está en la lista de excluidas
unset($terms[$key]);
}
}
return $terms;
}

Lo único que puedo ver que es evidentemente ineficiente es el hecho de que llames a get_cat_ID
para cada categoría en cada término. Eso es una consulta a la base de datos por cada llamada a la función.
Sería más eficiente llamar a esas funciones antes del foreach
y colocarlas en un array enviado como parámetro a la función.

Quizás podrías intentar agregar los términos que estás verificando en un array, y luego simplemente verificar si el $cat_id está en el array. Quiero decir que existen funciones similares a eso, pero no las recuerdo en este momento. Esto eliminaría la necesidad de los OR's
