Pregunta

Combinando taxonomías y roles de usuario, estoy listando todos los términos de "perro" de impuestos ", y para cada término" perro ", una lista de todos los" colores "que están vinculados a un perfil de usuario.Ejemplo:

  • El usuario 1 tiene Meta "Dog: Golden Retriever" y "Color: Amarillo" almacenado con el perfil.
  • El usuario 2 tiene Meta "Dog: Golden Retriever" y "Color: Black" almacenado con el perfil.
  • El usuario 3 tiene Meta "Dog: Golden Retriever" y "Color: Black" almacenado con el perfil.

Encabezado 3 Las etiquetas a continuación escupen el "nombre del término"= que en este caso sería 'perro'.Debajo del perro, debería haber una lista de "colores" que están vinculados a este perro a través de un meseta de usuario, es decir, amarillo, negro. lo importante es que "negro" solo aparece una vez, no dos veces.Estoy tratando de eliminar duplicados, pero estoy recibiendo un error.

editado: el error ya no persiste.Sin embargo, ahora, la matriz ECHO $ solo Echos "Negro", no "amarillo" o cualquier otro color.

¿Alguna idea?

<?php $terms = get_terms('dogs');
$count = count($terms);
if ( $count > 0 ){ foreach ( $terms as $term ) { ?>

<h3><?php echo $term->name; ?></h3> // Show different "dog" type names 

<div class="listed_dogs_color_names"> 

    // Now search all editor and contributor user profiles for "dog" and "color" user_meta. Color and dog are both taxonomies that are used both with posts and users (user meta)
    // If matches with the "dog" above, list "color" underneath "dog name" in <h3></h3> above.

<?php
$term_parent = $term->parent;
$term_slug = $term->slug;
$editor_query = new WP_User_Query(
    array(
    'role'         => 'editor',
    'meta_key'     => $term_parent, 
    'meta_compare' => '=', 
    'meta_value'   => $term_slug,       
)
);
$editors = $editor_query->get_results();
$contributor_query = new WP_User_Query(
    array(
    'role'         => 'contributor',
    'meta_key'     => $term_parent, 
    'meta_compare' => '=', 
    'meta_value'   => $term_slug,       
)
);
$contribs = $contributor_query->get_results();
$users = array_merge( $contribs, $editors ); 
?>

<?php 
                    $array = array(); // initialize as empty array ?>
                        <?php if (!empty($users)) {?>
                                <?php foreach ($users as $user) : 
                                        $b = $user->color;
                                        $color = explode("\n", $b);
                                        $array[] = $color[0];
                                        ?>
                            <?php endforeach; ?>

                            <?php $array = array_unique($array); ?>
                            <?php 
                            echo "<li>";
                            echo $array[0]; 
                            echo "</li>";
                            ?>
                        <?php } ?>

</div><!--close-->
<?php }?>
<?php }?>

¿Fue útil?

Solución 2

Solución al problema, muchas gracias a @amal por caminar a través de ella conmigo

<?php if (!empty($users)) {?>
  <ul>
    <?php 
   $array = array();
   foreach ($users as $user) :  
       $b = $user->color;
       $color = explode("\n", $b);
       $array[] = $color[0];
    ?>

<?php endforeach; ?> // close the foreach, looped through all users already and stored meta into array

<?php $array = array_unique($array, SORT_REGULAR); ?> // take array and remove dupes                        

     <?php foreach ($array as $item) { ?> // foreach and style. can also implode and separate with commas via <?php $spitarray = implode ( ", ", $spitarray); ?>
          <li><?php echo $item; ?></li>
     <?php } ?>
  </ul>
<?php } ?>

Otros consejos

De forma predeterminada, PHP intentará convertir los objetos en cadenas para comparación.Esto está causando el error.Puede especificar el segundo parámetro de array_unique() para anular esto:

foreach(array_unique($users, SORT_REGULAR) as $user)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top