WordPress — захват элемента по категориям в запросе типа Post

#wordpress

#wordpress

Вопрос:

Я настроил пользовательский тип сообщения в WordPress. Это раздел, в котором клиент может загружать документы в формате PDF. Документы разделены на две категории — «Загружаемые формы» и «Меню»; Пользовательское имя поля для категории — «document_category»

Я пытаюсь выполнить запрос и отображать только «Загружаемые формы» на странице. Вот код, который я обычно использую — я надеюсь, что кто-нибудь может помочь мне добавить то, что мне нужно, чтобы заставить его работать?

 <?php       
$args = array('post_type' => 'prep_forms', 'posts_per_page' => -1);
// The Query
$the_query = new WP_Query( $args );
// The Loop
$i = 0;
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<li><a href="<?php echo get_field('document_pdf_file'); ?>"><?php the_title(); ?></a></li>
<?php
$i  ;
endwhile;
// Reset Post Data
wp_reset_postdata();
?>
  

Спасибо.

Ответ №1:

 <?php       
$args = array('post_type' => 'prep_forms', 'posts_per_page' => -1);
// The Query
$the_query = new WP_Query( $args );
// The Loop
$i = 0;
while ( $the_query->have_posts() ) : 
    $the_query->the_post();
    // Get all Advanced custom fields
    $my_custom_fields = get_fields(get_the_ID());
    // Does document_category field exists and is it equal with 'Downloadable Forms'?
    if(isset($my_custom_fields['document_category']) amp;amp; $my_custom_fields['document_category'] == 'Downloadable Forms'):
?>
<li><a href="<?php echo get_field('document_pdf_file'); ?>"><?php the_title(); ?></a></li>
<?php
    endif;
$i  ;
endwhile;
// Reset Post Data
wp_reset_postdata();
?>
  

Я использовал get_fields($post_id = false) функцию плагина Advanced Custom Fields, который возвращает массив пользовательских полей всех сообщений, а затем фильтрует его в соответствии с вашими потребностями.

Надеюсь, я помог

Комментарии:

1. Снова спас меня. Спасибо, Костис.

Ответ №2:

Ну, вы можете использовать is_category(); внутренний цикл и отображать только эти сообщения, например, так (используя ваш же код):

 <?php       
$args = array('post_type' => 'prep_forms', 'posts_per_page' => -1);
// The Query
$the_query = new WP_Query( $args );
// The Loop
$i = 0;
while ( $the_query->have_posts() ) : $the_query->the_post();

if(is_category('Sownloadable Forms')){  // here the condition

?>
<li><a href="<?php echo get_field('document_pdf_file'); ?>"><?php the_title(); ?></a></li>
<?php
$i  ;
} // here ends the IF statment
endwhile;
// Reset Post Data
wp_reset_postdata();
?>
  

Еще лучше: http://codex.wordpress.org/Function_Reference/is_category

Надеюсь, это поможет.

Комментарии:

1. Единственная проблема с этим — это не категория WordPress. Я настроил пользовательское поле в расширенных пользовательских полях, где пользователь выбирает категорию при загрузке PDF.

Ответ №3:

Почему бы вам не упростить и не задать запрос на основе пользовательских данных поля?

 <?php 
$count = 1;
$args = array(
  'post_type' => 'any',
  'posts_per_page' => 4,
  'meta_key' => 'display', 
  'meta_value' => 'true'
);

$query = new WP_Query();$query->query($args); 
while ($query->have_posts()) : $query->the_post();                      
$do_not_duplicate[] = $post->ID;
?>
    <!-- query content -->
    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf( esc_attr__( 'Permalink to %s', 'advanced' ), the_title_attribute( 'echo=0' ) ); ?>" ></h2>
    <?php the_excerpt() ;?>
    <!-- query content -->
<?php $count  ; endwhile; wp_reset_query(); ?>
  

Таким образом, любое сообщение с отображением ключа пользовательского поля и значением пользовательского поля true будет показано в вашем запросе.