Wordpress术语列表的帖子

时间:2014-12-20 20:11:08

标签: php mysql wordpress

在Wordpress中我正在构建一个索引页面,我在表格中列出了我博客的所有文章。该表的每一行都具有以下结构:帖子标题,属于某个组的术语。例如,如果是关于电影:

 Blade Runner       | noir, science fiction
 Gone with the Wind | dramatic

关键是:当我有多个术语时,会出现一些奇怪的错误,它会返回一个空集,或者有时会列出错误的术语。我很困惑,因为我无法弄清楚为什么会发生这种情况。这就是我获取数据的方式。

//Loops through the articles in the table wp_posts
foreach($results as $result){
    $metaStr = "";
    $id = $result->ID;
    $query = "
        SELECT name 
        FROM wp_term_relationships 
        INNER JOIN wp_terms
        ON term_id = term_taxonomy_id
        WHERE object_id = $id AND term_taxonomy_id IN (6, 7, 8, 9, 14, 15, 18, 22, 24, 30)
    ";
    $metas = $wpdb->get_results($query);
    $count = 0;
    foreach($metas as $meta){
        if($count > 0){
            $metaStr .= "<br />";
        }
        $metaStr .= $meta->name;
        $count++;
    }
    print $metaStr;
}

有人可以帮忙吗?我究竟做错了什么?有一个更好的方法吗? 干杯

2 个答案:

答案 0 :(得分:5)

输入以下功能,只需传递帖子ID,在您的情况下为$ result-&gt; ID;

function my_get_term_of_post($postId){
$metaStr="";
$term_list = wp_get_post_terms($postId, 'console', array("fields" => "all"));
$i=1;
foreach($term_list as $termSingle){
    if($i==1)
     $metaStr=$termSingle->name;
    else
     $metaStr.= "<br/>".$termSingle->name;
    $i++;
}
return $metaStr;

}

$ term_list = my_get_term_of_post($ result-&gt; ID);

答案 1 :(得分:0)

永远不要在一列中存储多个值!

改为更改表格设计并为映射添加另一个表格。像

posts table
------------
id
title


tags table
------------
id
name


post_tags table
------------------
post_id
tag_id

通过这种方式,您将拥有一个已定义的标签列表,这是一种快速查询数据的方式,也可以进行标准化。