Cum să preiau doar termenii care sunt în uz

18 mar. 2024, 18:39:15
Vizualizări: 59
Voturi: 1

Folosesc în prezent term_exists( $term, $taxonomy ); într-o condiție, dar problema este că include termeni care nu sunt folosiți (deși există în lista de categorii).

Există ceva pe care îl pot folosi în afară de term_exists care să includă doar categoriile care sunt în uz? Sau trebuie să filtrez cumva pentru a obține doar termenii activi?

Filtrez o arhivă de proprietăți imobiliare prin intermediul unui element select. O dată pe săptămână, când sunt desemnate casele deschise, aplic categoria 'Open House' acestora, permițând vizitatorilor să sorteze pentru a vedea toate casele deschise. După weekend, șterg categoria de casă deschisă din fiecare listare. Exemplu: https://megangulick.com/agent-listings/ (în prezent editez manual opțiunea, așa că 'Open House' nu apare ca opțiune).

Ceea ce încerc să fac este să modific opțiunea inițială select în funcție de existența sau nu a caselor deschise în prezent.

Iată cum arată codul meu existent:

<?php $categories = get_categories('taxonomy=listing-neighborhood&post_type=listings'); ?>
<select name="listingcat" id="listingcat" onchange="submit()">
<?php //acesta este fragmentul pentru care am nevoie de o soluție
$cat = (term_exists('Open House', $categories));
if $cat {
    echo '<option value="">Selectează cartierul sau casa deschisă</option>';
} else { 
    echo '<option value="">Selectează cartierul</option>';
}
?>
<?php 
    foreach ($categories as $category) : 
    echo '<option value="'.$category->name.'"';
    if(isset($_GET['listingcat']) && ($_GET['listingcat'] == $category->name)) { 
        echo ' selected="selected"'; 
    } 
    echo '>'.$category->name.'</option>';
    endforeach; 
?>
</select>

Sarcina aici este să determin dacă un anumit termen (de ex. Open House) este în uz, apoi să folosesc informația pentru o instrucțiune condițională if/else.

6
Comentarii

Ai încercat să adaugi &hide_empty=1 în șirul tău de interogare?

birgire birgire
19 mar. 2024 17:10:34

La asta te referi?
<?php $categories = get_categories('taxonomy=listing-category&post_type=listings&hide_empty=1'); ?> Nu are niciun efect.

Ray Gulick Ray Gulick
19 mar. 2024 17:24:09

Ar trebui să ascută cele goale implicit, presupun că nu înțeleg corect configurația și întrebarea.

birgire birgire
19 mar. 2024 18:03:08

Dropdown-ul afișează termenii perfect, inclusiv doar cei care sunt în uz. Ceea ce încerc să fac este să afișez o primă opțiune diferită în funcție de dacă 'Open House' este în uz. Bănuiesc că 'term exists' este funcția greșită de utilizat, deoarece obține toți termenii, indiferent dacă sunt în uz sau nu. DACA 'Open House' se află printre termenii activi ATUNCI AFIȘEAZĂ <option value="">Selectează cartierul sau open house</option> ALTĂFEL AFIȘEAZĂ <option value="">Selectează cartierul</option>

Ray Gulick Ray Gulick
19 mar. 2024 21:29:45

Dacă încerci să determini dacă un anumit post are un anumit termen, poți folosi has_term() -- ceva de genul has_term( 'Open House', 'listing-category', get_the_ID() ) ar putea fi ceea ce ai nevoie în loc de apelul tău la term_exists().

Pat J Pat J
20 mar. 2024 02:48:29

Nu încerc să determin dacă un anumit post are termenul, încerc să determin dacă ORICE post are un anumit termen. Am încercat has_term; nu funcționează. Bănuiesc că am nevoie de o condiție in_array.

Ray Gulick Ray Gulick
20 mar. 2024 11:40:30
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 2
0

Am început să cercetez array-urile de termeni și am ajuns la o soluție care funcționează, pentru a crea o condiție bazată pe faptul dacă un termen este folosit sau nu de către vreun articol:

<?php $categories = get_categories('taxonomy=listing-neighborhood&post_type=listings'); ?>
<?php 
    $term_name = wp_list_pluck( $categories, 'name' );
    $this_name= 'Open House';
    if( in_array( $this_name, $term_name ) ){
        echo '<option value="">Selectează starea sau open house</option>';
    } else { 
        echo '<option value="">Selectează starea (afișează toate implicit)</option>';
    }
?>

Apreciez ajutorul tuturor. Cred că întrebarea mea inițială a fost derutantă, nu era întrebarea de care aveam nevoie pentru a găsi soluția.

20 mar. 2024 13:31:05
2
-1

Pentru a obține doar termenii care sunt utilizați în postări asociate, puteți folosi funcția get_terms() cu parametrul pad_counts setat pe true. Acest lucru va asigura că proprietatea count a fiecărui obiect termen reflectă numărul de postări asociate. Apoi puteți filtra termenii care au count 0.

$taxonomy = 'your_taxonomy'; // Înlocuiți 'your_taxonomy' cu numele taxonomiei dvs.
$terms = get_terms(array(
    'taxonomy' => $taxonomy,
    'pad_counts' => true, // Setat pe true pentru a include numărul de postări asociate
));

// Filtrați termenii pentru a include doar cei cu postări asociate
$used_terms = array_filter($terms, function($term) {
    return $term->count > 0;
});

// Verificați dacă s-au obținut termeni
if (!empty($used_terms)) {
    foreach ($used_terms as $term) {
        // Afișați informațiile despre termen
        echo '<p>Nume Termen: ' . $term->name . '</p>';
        echo '<p>ID Termen: ' . $term->term_id . '</p>';
        echo '<p>Slug Termen: ' . $term->slug . '</p>';
        echo '<p>Descriere Termen: ' . $term->description . '</p>';
        echo '<p>Număr Postări: ' . $term->count . '</p>';
        // Puteți afișa mai multe informații despre termen dacă este necesar
    }
} else {
    echo 'Nu s-au găsit termeni cu postări asociate.';
}
19 mar. 2024 05:18:26
Comentarii

Va trebui o rescriere mai amplă decât mă așteptam, dar pare promițător. Revin cu rezultate mai târziu în această dimineață. Mulțumesc.

Ray Gulick Ray Gulick
19 mar. 2024 10:46:29

Nu funcționează chiar așa în cazul meu (am adăugat codul existent și informații suplimentare în întrebarea mea originală).

Ray Gulick Ray Gulick
19 mar. 2024 14:00:27