Cum poate fi îmbunătățită această funcție simplistă?

25 ian. 2011, 06:45:58
Vizualizări: 148
Voturi: 0

În prima funcție de mai jos, în interiorul foreach-ului, apelez a doua funcție pentru a verifica existența ID-urilor de categorii pe care vreau să le elimin din listarea categoriilor.

Totuși, modul în care fac acest lucru în a doua funcție mi se pare destul de simplist. Cum aș putea îmbunătăți această căutare?

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') || $cat_id == get_cat_ID('hidden') || $cat_id == get_cat_ID('category2') || $cat_id == get_cat_ID('category3'))
    {
        return true;
    }
    else
    {
        return false;
    }
}

EDIT: Funcțiile de mai sus sunt apelate în următorul mod...

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

De unde apelezi funcția admin_trim_category_description()? Care este contextul și cazul tău de utilizare? De asemenea, ce conține $terms?

MikeSchinkel MikeSchinkel
25 ian. 2011 07:20:47

Și iată o listă utilă cu funcții pentru array-uri în PHP: http://www.w3schools.com/php/php_ref_array.asp

hakre hakre
25 ian. 2011 07:23:58

@Mike: Bun punct, am actualizat întrebarea pentru a oferi contextul

Scott B Scott B
25 ian. 2011 17:38:12
Toate răspunsurile la întrebare 3
1
function admin_trim_category_description( $terms, $taxonomies ){
  // Verificăm dacă taxonomia este 'category'
  if( 'category' != $taxonomies[0] )return $terms;
  
  // Lista de categorii care vor fi ascunse sau tratate special
  $whatever_categories = array('category1', 'hidden', 'category2', 'category3');

  // Parcurgem fiecare termen
  foreach( $terms as $key => $term)
    // Dacă categoria nu se află în lista specială, trunchiem descrierea
    if(!in_array($terms[$key]->name, $whatever_categories)) $terms[$key]->description = strip_tags(substr( $term->description, 0, 75 ))."...";
    // Altfel, eliminăm categoria din listă
    else unset($terms[$key]);


  return $terms;
}
25 ian. 2011 07:19:02
Comentarii

+1 Funcționează perfect. Știam că există o metodă mai bună :) in_array va fi util în viitor.

Scott B Scott B
25 ian. 2011 17:44:52
0

Singurul lucru pe care îl pot vedea și care este evident ineficient este faptul că apelezi get_cat_ID pentru fiecare categorie și pentru fiecare termen. Aceasta reprezintă o interogare la baza de date pentru fiecare apel de funcție.

Ar fi mai eficient să apelezi aceste funcții înainte de foreach și să le stochezi într-un array trimis ca parametru către funcție.

25 ian. 2011 07:20:22
0

Poate încercați să adăugați termenii pe care îi verificați într-un array și apoi să verificați dacă $cat_id se află în array. Aș vrea să spun că există funcții similare cu asta, dar nu le pot aminti pe loc. Asta ar elimina nevoia de a folosi OR-uri.

25 ian. 2011 07:22:13