Проблемы с Query в wordpress


я делаю функцию, чтобы принести несколько курсов для этого у меня есть post type, где я загружаю курсы и таксономию меток, которые я назначаю, какой курс они принадлежат, чтобы показать это у меня есть раздел, который является фильтром, где я должен сказать вам, какие курсы активны, для этого создайте поле customs fields selector, чтобы поместить, какой курс включен / не включен. Проблема в том, что, когда я включаю из бэкэнда курс я не получаю его образец.

пример можно увидеть здесь я также прилагаю фотографию того, как является фильтром imagen del ejemplo html

query выглядит следующим образом;

<div class="col-md-12 text-center">
  <div id="filter" class="animated fadeInDown bottomspace10">
    <ul>
      <li><a href="#" data-filter="*" class="selected"><i class="icon icon-reorder"></i> Ver Todos</a></li>

      <li><a href="#" data-filter=".activo" title="¡Fechas Definidas!"><i class="icon icon-th"></i> Cursos Activos</a></li>
      <li>Líneas:</li>

      <?php 
									$terms = get_terms('categoria-cursos', get_queried_object());
									if($terms){

									foreach ($terms as $termino){ ?>
      <li>
        <a href="#" data-filter=".id<?php echo $termino->term_id;?>"><i class="icon icon-th"></i> 
											<?php echo $termino->name; ?>
											</a>
      </li>

      <?php } }?>
    </ul>
  </div>
</div>

<div id="content">
  <?php if($terms){ //si existe contenido 

					foreach($terms as $termino){
						$args = array(
							'post_type' => 'curso',
							'showposts'=> -1,
							'tax_query' => array(
						    array(
						        'taxonomy' => 'categoria-cursos',
						        'field' => 'id',
						        'terms' => $termino->term_id
						        )
						    )
						);
						$posts = new WP_Query( $args );
					

							if($post){
								while($posts->have_posts()):
									$posts->the_post();
								$cur = $post;

									?>
  <div class="boxportfolio1 bp-height item id<?php echo $termino->term_id;?> <?php  if(get_terms('curso_activo',$cur->ID) == 'habilitado'){echo 'activo';}?>">
    <!-- desde acá parte un bloque -->
    <div class="boxcontainer">
      <div class="prod-imagecontainer">
        <img src="<?php echo get_the_post_thumbnail_url($cur->ID,'thumbnail'); ?>" alt="<?php echo $cur->post_title; ?>">
      </div>
      <div class="roll">
        <div class="wrapcaption">
          <a href="<?php echo get_the_permalink($cur->ID); ?>"><i class="icon-arrow-right captionicons"></i></a>
        </div>
      </div>
      <div class="prod-infocontainer">
        <h1>
          <a href="vero-alphacam-router.html">
            <?php echo $cur->post_title; //este es tl titulo?>
          </a>

        </h1>
        <p>
          <?php echo get_the_content($cur->ID);?>
        </p>
      </div>
    </div>
  </div>
  <?php endwhile;
							}
						?>
  <?php } } ?>

</div>
Author: MarianoF, 2018-04-16

2 answers

Вы используете get_terms () чтобы добраться до значения custom field, где вы храните, активен ли курс или нет. Проблема в том, что эта функция возвращает arrayрезультатов, и поэтому вы не можете сравнить полученный resulatdo, как если бы это был stringс помощью оператора ==.

Альтернативой может быть использование функции get_post_meta(), которая отправляет третий параметр как trueвозвращает одно значение в формате string.

Тест изменение этой строки:

<?php 
     if (get_terms('curso_activo',$cur->ID) == 'habilitado') {
     echo 'activo';
     } 
   ?>

Для этого:

<?php 
 if (get_post_meta('curso_activo', $cur->ID,true) === 'habilitado') {
     echo 'activo';
  } 
?>

Наконец, и в качестве добавления я советую вам разработать в режиме отладки

 1
Author: ErnestoRM, 2018-04-17 11:29:20

Я вижу немного странно использование get_terms Попробуйте это:

<?php 
  $ct = get_terms([
    'taxonomy' => 'curso_activo',
    'hide_empty' => true,
  ]); 
  // var_dump($ct); <-- descomentar para ver que devuelve get_terms
  if (!empty($ct)&&in_array('habilitado', $ct))
  {echo 'activo';}
  ?>">
 1
Author: alo Malbarez, 2018-04-16 20:20:54