2012-04-11 3 views
0

Я хочу получить последние теги из последних 10 сообщений. Или получить последние 100 тегов, которые использовались в последних сообщениях. Мой код:Получить последние теги в wordpress

<?php 

$tags .= "SELECT $wpdb->terms.term_id, $wpdb->terms.name, $wpdb->terms.slug 
FROM $wpdb->terms 
    INNER JOIN $wpdb->term_taxonomy ON ($wpdb->terms.term_id =  $wpdb->term_taxonomy.term_id) 
    INNER JOIN $wpdb->term_relationships ON ($wpdb->terms.term_id = $wpdb->term_relationships.term_taxonomy_id) 
    INNER JOIN $wpdb->posts ON ($wpdb->term_relationships.object_id = $wpdb->posts.ID) 
WHERE $wpdb->term_taxonomy.taxonomy = 'post_tag' 
ORDER BY $wpdb->posts.post_date DESC"; 

$tags= $wpdb->get_results($tags); // $query being the above SQL 
foreach ($tags as $tag) { 
if (!isset($stack[$tag->term_id])) 
    $stack[$tag->term_id] = $tag; 
} 
print_r($stack); // should print an array of all tags, ordered by last used 
?> 

И это не работает. Например, ссылки на теги отсутствуют.

ответ

0

Проверьте, подходит ли ваш запрос или нет.

print_r($tags); 

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

<?php 
$posttags = get_the_tags(); 
if ($posttags) { 
    foreach($posttags as $tag) { 
    echo $tag->name . ' '; 
    } 
} 
?> 
+0

Спасибо, print_r ($ теги) - функция, возвращающая список тегов с их параметрами, но они не связаны между собой. – Ronin

0

Как об этом:

<?php 

function my_tags_test() 
{ 
    ?> 
    <div style="background: white; color: black; font-size: 15px;"> 
    <h1 style="font-size: 100px;">my_tags_test:</h1> 
    <?php 

    global $wpdb; 


    $sql = 
    ' 
drop temporary table if exists last_10_posts 
    ;'; 
    $wpdb->query ($sql); 

    $sql = 
    ' 
create temporary table last_10_posts (ID int, post_date datetime) 
    ;'; 
    $wpdb->query ($sql); 

    $sql = 
    ' 
insert into last_10_posts 
select 
    ID, post_date 
from 
    ' . $wpdb->posts . ' 
order by 
    post_date desc 
limit 0, 10 
    ;'; 
    $wpdb->query ($sql); 

    $sql = 
    ' 
SELECT terms.term_id, terms.name, terms.slug 

FROM ' . $wpdb->terms . ' terms 

INNER JOIN ' . $wpdb->term_taxonomy . ' tt 
    ON (terms.term_id = tt.term_id) 

INNER JOIN ' . $wpdb->term_relationships . ' tr 
    ON (terms.term_id = tr.term_taxonomy_id) 

INNER JOIN ' . $wpdb->posts . ' posts 
    ON (tr.object_id = posts.ID) 

INNER JOIN last_10_posts 
    ON (last_10_posts.ID = posts.ID) 

WHERE 
    tt.taxonomy = \'post_tag\' 

ORDER BY 
    posts.post_date DESC 

    '; 

    $tags = $wpdb->get_results ($sql); // $query being the above SQL 


    $stack = array(); 

    $links = ''; 

    foreach ($tags as $tag) 
    { 
     if (!isset($stack[$tag->term_id])) 
     { 
      $stack[$tag->term_id] = $tag; 
     } 

     $links .= '&rarr; <a href="' . esc_attr (get_tag_link ($tag->term_id)) .'">' . esc_html ($tag->name) . '</a><br/>'; 
    } 


    echo '<div style="margin: 20px; padding: 20px;">' . $links . '</div>'; 

    echo '<pre>' . esc_html (print_r ($stack, true)) . '</pre>'; // should print an array of all tags, ordered by last used 

    ?> 
    </div> 
    <?php 
} 

add_action ('wp_footer', 'my_tags_test'); 

?> 
+0

Большое спасибо, но есть пустой ответ - Array () – Ronin

+0

Я просто попробовал его на новой установке последнего Wordpress 3.3.1. Добавлено несколько сообщений, добавлено несколько тегов, добавлен этот код в качестве плагина. Он отображает теги внизу страницы, как и ожидалось. Возможно, у вас есть другая структура БД. Возможно, старая версия WP? – gregn3