отображать отмеченные сообщения и пользовательские сообщения в избранном разделе - PullRequest
1 голос
/ 03 марта 2011

В избранном разделе главной страницы я хотел бы отобразить 7 последних сообщений, которые являются обычными сообщениями, помеченными тегом id # 50, или сообщениями пользовательского типа с типом сообщения sp_events.

Это не работает. Предположительно, потому что tag__in отфильтровывает непомеченные посты пользовательского типа. Мой php такой плохой, что я не вижу, как это исправить.

    query_posts(
        array(
            'tag__in' => array(50),
            'showposts' => '7',
            'post_type' => array('post', 'sp_events')
        )
    );

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

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

Я добавил следующее в functions.php и отметил теги типа сообщений:

add_action('init', 'add_taxonomy_objects');

function add_taxonomy_objects() {
register_taxonomy_for_object_type('post_tag', 'sp_events');
}'
0 голосов
/ 03 марта 2011

Если я не ошибаюсь (что, скорее всего, я могу быть), вы не можете выполнить запрос, как пытаетесь сделать со встроенными функциями Wordpress.

То, что вы можете сделать, находится вВаш файл functions.php (где хранятся пользовательские функции темы), содержащий функцию, которая принимает массив массивов аргументов и проходит по ним с каждым проходом, добавляя возвращаемые сообщения в массив.Я думаю, что get_posts () будет наилучшей функцией для этого, так как она возвращает сообщения в массиве вместо необходимости в цикле.

function query_posts_multiple($arrArgs)
{
  if (!is_array($arrArgs)) return false; // Prevents warnings and fatal errors.
  $posts = array();

  foreach ($arrArgs as $args)
  {
    $posts = array_merge($posts, get_posts($args));
  }

  return $posts;
}

Для массива args, вотпример:

$args = array();
$args[] = array(
  'numberposts'     => 7,
  'tag'             => "50",
);

Вы бы просто использовали цикл foreach () в своей теме.Для доступа к данным вы должны использовать $ post -> column fashion.

$posts = get_posts_multiple($args);
foreach ($posts as $post)
{
  // call all the $post->COLUMNs your heart desires
}
unset($posts); // Delete that variable just to be safe.

Чтобы ограничить количество сообщений, просто продолжайте считать и останавливайте цикл, когда достигнете определенного числа.Чтобы рандомизировать ваш массив, вы можете использовать shuffle () .

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

Логан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...