it-swarm.com.de

Bestimmten Slug in 'get_terms' ausschließen

Ich habe eine benutzerdefinierte Taxonomie- "Rolle" für meinen benutzerdefinierten Beitragstyp "Personen".

Gibt es eine Möglichkeit, bei der Auflistung der Rollen Rollen basierend auf Slug und nicht ID über die Funktion get_terms auszuschließen?

Ich frage, weil ich eine Multisite betreibe und einige Websites dieselben IDs haben wie diejenigen, die ich ausschließen möchte.

Gerade habe ich:

<?php
$roles = get_terms(
    'role', array(
    'orderby'       => 'ID',
    'order'         => 'ASC',
    'hide_empty'    => true,
    'exclude'       => array('58', '63', '833'),
    ));
$count_roles = count($roles);
if ( $count_roles > 0 ) : ?>
     //do stuff
<?php endif;?>

Die Nacktschnecken, die ich ausschließen möchte, sind: 'slug' => ['graduate', 'job-market-candidate', 'graduate-student','research'], aber ich weiß nicht, wo diese Zeile passt, wenn überhaupt.

Jede Hilfe wird geschätzt!

3
timmyg

Die Funktion get_terms() ( siehe Dokumentation ) akzeptiert dieselben Argumente wie WP_Term_Query ( siehe Dokumentation )
Sie müssen zuerst die Bezeichnungs-IDs abrufen und dann an das Argument exclude übergeben:

// default to not exclude terms
$ids_to_exclude = array();
$get_terms_to_exclude =  get_terms(
    array(
        'fields'  => 'ids',
        'slug'    => array( 
            'graduate', 
            'job-market-candidate', 
            'graduate-student',
            'research' ),
        'taxonomy' => 'role',
    )
);
if( !is_wp_error( $get_terms_to_exclude ) && count($get_terms_to_exclude) > 0){
    $ids_to_exclude = $get_terms_to_exclude; 
}
$roles = get_terms(
    array(
        'orderby'    => 'ID',
        'order'      => 'ASC',
        'hide_empty' => true,
        'exclude'    => $ids_to_exclude,
        'taxonomy'   => 'role',
    )
);

$count_roles = count($roles);

if ( $count_roles > 0 ) : ?>
     //do stuff
<?php endif;?>
4
Pabamato

In get_terms() gibt es keine Möglichkeit, per Slug auszuschließen. Sie müssen die IDs der von Ihnen gewünschten Begriffe basierend auf deren Slug ermitteln. then Diese IDs ausschließen, wie in Pabamatos Antwort.

Aber Sie werden wahrscheinlich eine bessere Leistung erzielen, wenn Sie sie nur bei der Ausgabe überspringen, anstatt die Abfrage mit der exclude zu verlangsamen oder zusätzliche Abfragen durchzuführen.

$count_roles = count( $roles );

if ( $count_roles > 0 ) :
    $exclude = ['graduate', 'job-market-candidate', 'graduate-student','research'];

    foreach ( $roles as $role ) {
        if ( ! in_array( $role->slug, $exclude ) ) {
            continue;
        }

        // Do stuff.
    }
endif;

Oder Sie können die relevanten Begriffe nach dem Abrufen mit array_filter() aus der Ergebnismenge entfernen und dann wie gewohnt fortfahren.

$exclude = ['graduate', 'job-market-candidate', 'graduate-student','research'];

$roles = get_terms( array(
    'taxonomy'   => 'role',
    'orderby'    => 'ID',
    'order'      => 'ASC',
    'hide_empty' => true,
) );

$roles = array_filter( $roles, function( $role ) {
    return in_array( $role->slug, $exclude ) ? false : true;
} );

$count_roles = count( $roles );
2
Jacob Peattie