Проблемы с Query в wordpress
я делаю функцию, чтобы принести несколько курсов для этого у меня есть post type, где я загружаю курсы и таксономию меток, которые я назначаю, какой курс они принадлежат, чтобы показать это у меня есть раздел, который является фильтром, где я должен сказать вам, какие курсы активны, для этого создайте поле customs fields selector, чтобы поместить, какой курс включен / не включен. Проблема в том, что, когда я включаю из бэкэнда курс я не получаю его образец.
пример можно увидеть здесь я также прилагаю фотографию того, как является фильтром
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>
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';
}
?>
Наконец, и в качестве добавления я советую вам разработать в режиме отладки
Я вижу немного странно использование 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';}
?>">