web-dev-qa-db-fra.com

Commandez get_terms par terme méta

J'ai une taxonomie personnalisée appelée prod-cat

Je veux commander la sortie dans le modèle par numéro, alors j'ai ajouté un term_meta à la taxonomie comme ceci:

add_action( 'prod-cat_add_form_fields', 'add_feature_group_field', 10, 2 );
function add_feature_group_field($taxonomy) {
    ?>
    <div class="form-field term-order-wrap">
        <label for="term-order">Order</label>
        <input type="text" name="wm-cat-prod-order" />
    </div>
    <?php
}

Et alors:

add_action( 'created_prod-cat', 'save_feature_meta', 10, 2 );
function save_feature_meta( $term_id, $tt_id ){
    if( isset( $_POST['wm-cat-prod-order'] ) && '' !== $_POST['wm-cat-prod-order'] ){
        add_term_meta( $term_id, 'wm-cat-prod-order', $_POST['wm-cat-prod-order'], true );
    }
}

J'ai le term_meta qui fonctionne, il est sauvé. Ensuite, dans le modèle, je fais ceci:

$args = array(
    'taxonomy'      =>  'categoria-de-productos',
    'orderby'       =>  'wm-cat-prod-order',
    'order'         =>  'ASC',
    'hide_empty'    =>  false,
    'hierarchical'  =>  false,
    'parent'        =>  0,
);

$terms = get_terms( $args );

Mais je n'arrive pas à le commander par le méta "wm-cat-prod-order". Quelqu'un à ce sujet? Merci

6
Ariel Nonamë

get_terms supporte un meta_query qui appelle un nouveau paramètre WP_Meta_Query comme vous pouvez le voir ici . Pour interroger vos termes avec la méta désirée, vous pouvez changer l'appel de fonction en quelque chose comme ceci:

$args = array(
  'taxonomy' => 'categoria-de-productos',
  'orderby' => 'meta_value_num',
  'order' => 'ASC',
  'hide_empty' => false,
  'hierarchical' => false,
  'parent' => 0,
  'meta_query' => [[
    'key' => 'wm-cat-prod-order',
    'type' => 'NUMERIC',
  ]],
);

$terms = get_terms( $args );

Ce code n'a pas été testé et doit éventuellement être modifié dans votre exemple. Mais les liens devraient vous guider vers la solution.

11
Fabian Marz
$args = array(

    'taxonomy'      => 'MY_TAX',
    'meta_key'      => 'ordem',
    'meta_compare'  => 'NUMERIC',
    'orderby'       => 'meta_value_num',
    'order'         => 'ASC',
    'hide_empty'    => false,
);

$the_query = new WP_Term_Query($args);

foreach ( $the_query->get_terms() as $term )
{
    ...
}
2
Danilo Bruno

pour moi, j'ai fait une taxonomie personnalisée et dans cette taxonomie, j'avais une méta personnalisée. Je voulais avoir dans le backend d'administration une colonne et la rendre triable. faire un travail triable pour une taxonomie personnalisée dans une méta personnalisée, je l'ai fait.

https://Pastebin.com/vr2sCKzX

public function pre_get_terms( $query ) {
$meta_query_args = array(
    'relation' => 'AND', // Optional, defaults to "AND"
    array(
        'key'     => 'order_index',
        'value'   => 0,
        'compare' => '>='
    )
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$query->meta_query = $meta_query;
$query->orderby = 'position_clause';

} J'ai trouvé la réponse dans ce lien https://core.trac.wordpress.org/ticket/34996

Il me suffisait d'adapter la réponse fournie dans les commentaires de @ eherman24

0
Lucas Gabriel