Как сделать запрос по формату записи в WordPress 3.1

10

Я пытаюсь запросить все сообщения в формате "цитата". Я добавил форматы сообщений в мои functions.php с

add_theme_support( 'post-formats', array( 'image', 'video', 'gallery', 'quote' ) );

Я выбрал «цитата» в качестве формата сообщения в админке. Последний пример в разделе Taxonomy_Parameters показывает, как отображать сообщения, имеющие формат «цитата», но когда я запускаю их в своей теме, сообщения не возвращаются. Вот код:

$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'post-format',
      'field' => 'slug',
      'terms' => 'post-format-quote'
    )
  )
);
query_posts( $args );

Когда я просто запросить все сообщения и место

echo get_post_format();

в цикле он возвращает слово «кавычка» на внешнем интерфейсе. Кроме того, когда я var_dump () запрос, я не вижу ничего в массиве о формате пост.

Кто-нибудь знает, можно ли сделать запрос по почтовому формату? Если так, как?

РЕДАКТИРОВАТЬ - См. 5 комментариев под ответом Bainternet: Это код, найденный в index.php двадцатки темы новой установки, пытающейся вернуть кавычки форматного типа. Я возвращаю «нет» вместо «цитата». Можете ли вы увидеть что-нибудь, что я должен изменить.

get_header(); ?>
<div id="container">
  <div id="content" role="main">
    <?php $args = array(
      'tax_query' => array(
        array(
          'taxonomy' => 'post-format',
          'field' => 'slug',
          'terms' => array('quote')
        )
      )
    );
    query_posts( $args );
    if ( have_posts() ) : while ( have_posts() ) : the_post();
      echo get_post_format();
    endwhile; else:
      echo 'no';
    endif;
    wp_reset_query();      
    ?>
  </div><!-- #content -->
</div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

РЕДАКТИРОВАТЬ 2 - Похоже, что Кодекс WordPress теперь изменился, и часть параметров таксономии находится только в кеше Google.

РЕДАКТИРОВАТЬ 3 - ОКОНЧАТЕЛЬНЫЙ РАБОЧИЙ КОД

$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'post_format',
      'field' => 'slug',
      'terms' => 'post-format-quote'
    )
  )
);
query_posts( $args );

Двадцать десять правок от первого правки будут ...

get_header(); ?>
<div id="container">
  <div id="content" role="main">
    <?php $args = array(
      'tax_query' => array(
        array(
          'taxonomy' => 'post_format',
          'field'    => 'slug',
          'terms'    => 'post-format-quote'
        )
      )
    );
    query_posts( $args );
    if ( have_posts() ) : while ( have_posts() ) : the_post();
      the_title();
      echo get_post_format();
      echo '<br />';
    endwhile; else:
      echo 'no';
    endif;
    wp_reset_query();      
    ?>
  </div><!-- #content -->
</div><!-- #container -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
PNMG
источник

Ответы:

7

Этот код неверен! У тебя есть

'taxonomy' => 'post-format'

Но это действительно должно быть:

'taxonomy' => 'post_format'

Без подчеркивания запрос будет недействительным. Я только что проверил это на своей установке WordPress 3.1 после того, как выдернул мои волосы в течение нескольких часов.

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

Джаред Уайт
источник
Большое спасибо за то, что поймали это. Я могу поклясться, что скопировал оригинальный код прямо со страницы Кодекса. (Может быть, это тоже было неправильно когда-то.) Теперь это работает. Наряду с изменением его на post_format, мне также нужно было изменить 'Terms' => 'quote' обратно на 'Terms' => 'post-format-quote'. Для всех, кто заинтересован, пожалуйста, смотрите Редактировать 3 оригинального сообщения для окончательного кода.
PNMG
Конечно, рад, что смог помочь. :)
Джаред Уайт
2

в tax_query«терминах» принимает массив, поэтому вам нужно поместить post-format-quoteв массив, как это:

$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'post-format',
      'field' => 'slug',
      'terms' => array('post-format-quote')
    )
  )
);
query_posts( $args );
Bainternet
источник
Кто-нибудь пробовал это и заставил это работать. Я добавил часть массива, и она все еще ничего не возвращала. Является ли post-format-quote правильным слагом для массива?
PNMG
нет, его не нужно помещать в пост-формат, который он сам, как "цитата", а не в пост-формат-цитата
Bainternet
Ты имеешь в виду, что я должен поместить 'term' => array ('quote'), поскольку это то, что я определил в кавычках в функции add_theme_support? Я тоже это попробовал. Все еще не повезло.
PNMG
хорошо 'term' => array ('quote') работает со мной, попробуйте вывести формат записи с помощью 'echo get_post_format ();' и посмотрим, что вы получите
Bainternet
Хорошо, поэтому, когда я повторяю, я получаю «цитата». В момент отчаяния я отключил все плагины и переключился обратно на стандартную двадцатку темы и создал 3 тестовых сообщения, одно в формате цитаты. Я обновил файл functions.php, чтобы добавить цитату в вызов add_theme_support, и обновил index.php, чтобы использовать следующий код: [см.
Правку