Как выводить категории пользовательской таксономии с помощью шорткодов

12 мая 2011 г., 07:10:20
Просмотры: 17.3K
Голосов: 2

У меня только что решили один вопрос здесь: Как выводить записи из одной категории в пользовательской таксономии

Теперь мне интересно, как взять этот код:

<?php
    $args = array(
        'posts_per_page' => 1,
        'post_type' => 'inventory',
        'tax_query' => array(
            array(
                'taxonomy' => 'inventory-category',
                'field' => 'slug',
                'terms' => array( 
                    'bulk-racks' 
                )
            )
        )       
    );
query_posts( $args ); while ( have_posts() ): the_post();

// делаем что-то здесь
?>

<?php endwhile; ?>

и вызывать его с помощью шорткодов, например, чтобы отображать категорию bulk-racks, используя что-то вроде [inventory-category="bulk-racks"]

Я знаю, как создать базовый шорткод, но не понимаю, как написать функцию, которая будет возвращать записи на основе введенного в шорткод названия категории.

Еще раз, любая помощь будет очень ценной.

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

Действительно, отметка решений — это вопрос уважения к времени, которое другие пользователи вложили в вашу задачу.

kaiser kaiser
12 мая 2011 г. 14:04:20

Спасибо, ребята, я принял первый ответ, моя вина в том, что не прочитал FAQ как следует. Всё равно немного грустно, что проголосовали против моего валидного вопроса, ведь он может помочь другим.

maikunari maikunari
12 мая 2011 г. 16:34:23
Все ответы на вопрос 1
6

Ознакомьтесь с шорткодом для вывода записей категории, чтобы понять принцип работы, а вот модифицированная версия плагина для вывода вашего типа записи и таксономии:

// Шорткод для таксономии категории
function cat_func($atts) {
    extract(shortcode_atts(array(
            'class_name'    => 'cat-post',
            'totalposts'    => '-1',
            'category'      => '',
            'thumbnail'     => 'false',
            'excerpt'       => 'true',
            'orderby'       => 'post_date'
            ), $atts));

    $output = '<div class="'.$class_name.'">';
    global $post;
    $args = array(
        'posts_per_page' => $totalposts, 
        'orderby' => $orderby,
        'post_type' => 'inventory',
        'tax_query' => array(
            array(
                'taxonomy' => 'inventory-category',
                'field' => 'slug',
                'terms' => array( $category)
            )
        ));
    $myposts = NEW WP_Query($args);


    while($myposts->have_posts()) {
        $myposts->the_post();
        $output .= '<div class="cat-post-list">';
        if($thumbnail == 'true') {
        $output .= '<div class="cat-post-images">'.get_the_post_thumbnail($post->ID, 'thumbnail').'</div>';
        }
        $output .= '<div class="cat-content"><span class="cat-post-title"><a href="'.get_permalink().'">'.get_the_title().'</a></span>';
        if ($excerpt == 'true') {
            $output .= '<span class="cat-post-excerpt">'.get_the_excerpt().'</span>';
        }
        $output .= '</div>
            <div class="cat-clear"></div>
        </div>';
    };
    $output .= '</div>';
    wp_reset_query();
    return $output;
}
add_shortcode('inventory-category', 'cat_func');

Использование:

Просто вставьте этот шорткод в ваши записи или страницы

[inventory-category totalposts="3" category="bulk-racks" thumbnail="true" excerpt="true" ]
  • totalposts - общее количество записей для вывода. По умолчанию -1 (все записи)
  • category - ярлык категории. Для нескольких категорий используйте запятую
  • thumbnail - установите true для отображения миниатюр. По умолчанию false
  • excerpt - установите true для отображения цитаты. По умолчанию true
  • orderby - параметр сортировки записей. По умолчанию post_date. Подробности смотрите на http://codex.wordpress.org/Template_Tags/get_posts
12 мая 2011 г. 09:13:47
Комментарии

Большое спасибо, Bainternet, сейчас же попробую это!

maikunari maikunari
12 мая 2011 г. 16:35:19

У меня возникает фатальная ошибка: Фатальная ошибка: исчерпан лимит памяти в 33554432 байт (попытка выделить 17301490 байт) в \wp-content\themes\ECSE\functions\inventory-shortcode.php на строке 30. Есть идеи, в чем может быть проблема? Кстати, вот строка 30: "$output .= '<div class="cat-post-list">';"

maikunari maikunari
12 мая 2011 г. 19:56:56

Полагаю, что закончилась память

Bainternet Bainternet
12 мая 2011 г. 20:22:37

Как вы думаете, это может быть вызвано медленным хостингом Go Daddy, который использует мой клиент?

maikunari maikunari
12 мая 2011 г. 20:42:31

Я думаю, это связано с настройками памяти сервера

Bainternet Bainternet
12 мая 2011 г. 21:46:49

Быстрое обновление — не удалось заставить это работать без ошибки исчерпания памяти, пробовал на разных хостах. В итоге не стал использовать шорткод. Но все равно спасибо.

maikunari maikunari
17 мая 2011 г. 20:31:43
Показать остальные 1 комментариев