web-dev-qa-db-fra.com

Vous voulez wp_get_post_terms retourner dans un ordre arbitraire, comment faire?

La fonction ci-dessous est renvoyée par ordre alphabétique et non, comme souhaité, par ordre arbitraire.
Est-il possible de ne pas retourner en ordre alphabétique mais dans l'ordre exact indiqué dans le tableau?

add_filter('the_content', 'my_function');
function my_function($content) {
if ( is_single() && in_category( '5' ) ) {
the_post_thumbnail('thumbnail', array('class' => 'top-post-img' ));    

global $post;
$term_list=wp_get_post_terms($post->ID,array('school','article','teacher'),array( "fields" => "names"));
?>
<div style="margin:45px;">
    School: <strong><?php print_r($term_list[0]); ?></strong><br />
    Article: <strong><?php print_r($term_list[1]); ?></strong><br />
    Teacher: <strong><?php print_r($term_list[2]); ?></strong>
</div>
<?php       
return $content;
} else { 
return $content;
}
}

J'ai essayé en ajoutant:

array ('orderby' => 'post__in'),  array ('post__in' => '24', '10', '3', '46' )

Les numéros sont les identifiants de taxonomie, mais ils n'en modifient aucun, ils ne génèrent pas non plus d'erreur.

Pour trouver les identifiants de taxonomie que j'ai utilisés, ou s'agit-il d'un mauvais code?

$terms = get_the_terms( $post->ID , 'taxonomy-name' );
if($terms) {
foreach( $terms as $term ) {
    echo $term->term_id.'<br />';
}
}

Devrais-je utiliser list_filter quelque part ou un peu plus bas dans le code après le print_r?

Ajoutée

 var_dump($term_list);

pour voir si la sortie en montrerait un autre, mais non, c'était le même ordre alphabétique.
Je suis presque sûr d’oublier certains mais quoi, et où. Ou est-ce que mon approche est totalement fausse?

J'adorerais trouver une solution.
Merci d’avance pour votre temps et vos efforts.

1
Charles
add_filter('the_content','my_function');
function my_function($content){
    the_post_thumbnail('thumbnail', array('class' => 'top-post-img' ));

  if (is_single() && in_category('5')){
    global $post;
    $term_list = wp_get_post_terms ($post->ID,'school',array('fields'=>'names'));
    ?>
    <div id="some_class">
    <span>School:<strong><?php print_r($term_list[0]); ?></strong></span>
    <?php
    if (is_single() && in_category('5')){
        $term_list = wp_get_post_terms ($post->ID,'article',array('fields' =>'names'));
        ?>
        <span>Article:<strong><?php print_r($term_list[0]); ?></strong></span>
        <?php
        if (is_single() && in_category('5')){
            $term_list = wp_get_post_terms ($post->ID,'teacher',array('fields'=>'names'));
            ?>
            <span>Teacher:<strong><?php print_r($term_list[0]); ?></strong></span>
            </div>
            <?php
            return $content;
            }
        }
    } else {
        return $content;
    }
}

Output as shown in Post

Grâce aux suggestions de Rarst , ce code fonctionne à merveille.
Comme vous pouvez le voir, il montre le Featured Image qui appartient à ce post,
et la sortie est renvoyée dans l'ordre exact souhaité dans le code.
Il utilise également des CSS pour styler (dans le style.css) afin de montrer Nice ci-dessous
le titre et au-dessus du contenu.

Update Obtenir un avis: Offset non défini: 0

Quelqu'un autour de moi pour m'aider?

1
Charles

Si vous jetez un oeil à la source de wp_get_object_terms() utilisée par de nombreuses fonctions connexes en interne, il n'y a pas d'option pour la personnalisation orderby dans celle-ci. Je voudrais probablement simplement re-trier les données renvoyées dans PHP pour cela.

Cependant, même plus concrètement, je voudrais simplement récupérer les termes pour différentes taxonomies séparément. Ce que vous avez là semble un peu logique logiquement - par exemple, si l’un des termes est manquant ou s’il en a plus que prévu attribués par erreur? La sortie ira mal vite.

0
Rarst