web-dev-qa-db-fra.com

Comment filtrer les catégories par champs personnalisés?

J'ai une page de catégorie personnalisée qui affiche les catégories enfants de la catégorie actuelle au lieu de messages. Je voudrais filtrer les catégories enfants en fonction d'un champ personnalisé afin que seules les catégories sélectionnées soient affichées. Le champ personnalisé est une case à cocher unique que j’ai ajoutée aux pages de catégorie à l’aide du plug-in Champs personnalisés avancés .

C'est le code que j'utilise pour obtenir les catégories enfants:

$cat = get_category( get_query_var( 'cat' ) );
$cat_id = $cat->cat_ID;

$child_categories = get_categories(
    array(
        'parent'     => $cat_id,
        'orderby'    => 'id',
        'order'      => 'DESC',
        'hide_empty' => '0'
    )
);

J'utilise maintenant meta_query comme suggéré par @birgire mais cela ne fonctionne toujours pas. J'ai changé le champ personnalisé d'une case à cocher à "true/false". C'est le code que j'utilise actuellement:

$cat = get_category( get_query_var( 'cat' ) );
$cat_id = $cat->cat_ID;

$child_categories = get_categories(
    array(
        'parent'     => $cat_id,
        'orderby'    => 'id',
        'order'      => 'DESC',
        'hide_empty' => '0',
        'meta_query' => array(
            array(
                'key'     => 'show_cat',
                'value'   => 'true',
                'compare' => '=',
            )
        )
    )
);
2
jrcollins

Vous devriez pouvoir utiliser l'attribut meta_query qui utilise WP_Meta_Query en coulisse:

$child_categories = get_categories(
    array(
        'parent'     => $cat_id,
        'orderby'    => 'id',
        'order'      => 'DESC',
        'hide_empty' => '0',
        'meta_query' => array(
            array(
                'key'     => 'mykey',     // Adjust to your needs!
                'value'   => 'myvalue',   // Adjust to your needs!
                'compare' => '=',         // Default
            )
        )
    )
);

Cela suppose que les terme méta-données soient stockés dans la table terme méta, par exemple. ajouté avec add_term_meta() ou update_term_meta(), à partir de WordPress 4.4.

L'approche précédente consistait à stocker les métadonnées de terme dans la table options, comme cela semble être le cas avec le plug-in ACF utilisé par OP.

2
birgire