如何获取自定义分类项的术语(post_tag)? WordPress的

时间:2016-09-18 10:06:02

标签: php wordpress custom-wordpress-pages

我创建了自定义帖子类型“照片”和自定义分类“catphoto”。

“照片”类型支持“catphoto”和“post_tag”作为分类。

现在我应该为客户端制作一个过滤器。

我需要在 taxonomy-catphoto.php 页面上显示所有属于当前“catphoto”项目的post_tags

例如,我有一个自定义帖子类型'照片'的帖子。这篇文章的名字是'Plane'。这篇文章属于' 1961-1981 'catphoto item。此外,它还有“ space ”,“飞机”,“星星”,“战争”等帖子标签。

另外,例如,我有一个“照片”的帖子,其名称是“士兵”。它属于' 1941-1961 'catphoto item并且有' WW2 ',' USA ',' USSR '喜欢发布标签。

现在,当我选择1941-1961 catphoto项目时,我应该得到一个列表: WW2 USA USSR

我试着这样:

if (substr($_SERVER['REQUEST_URI'],1,8) == 'catphoto'){
    $cur_terms = get_terms('post_tag');
    if ($cur_terms) {
        foreach( $cur_terms as $cur_term ){
            echo $cur_term->name.'<br/>';
        }
    }
}

现在我获得了所有catphoto项目的所有帖子标签。如何修复限制明确的catphoto项目。例如,' 1941-1961 '?

1 个答案:

答案 0 :(得分:0)

我通过$ _GET查询解决了这个问题。太简单... 首先,我决定创建自己的分类法类型(如post_tags)。它的名字是'mark'。

之后的片段是:

if (substr($_SERVER['REQUEST_URI'],1,8) == 'catphoto'){
    $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); 

    $query = new WP_Query( array('post_type' => 'photo', 'catphoto' => $term->name));

    echo '<ul>';

    $uniqueTerms = array();
    $uniqueSlugs = array();
    $uniquePar = $term->slug;

    while ( $query->have_posts() ) { 
        $query->the_post();
        $terms = wp_get_post_terms(get_the_ID(), 'mark', array("fields" => "all"));

        foreach ($terms as $term1)
        {
            if(!in_array($term1->name, $uniqueTerms)) {
               $uniqueTerms[] = $term1->name;
               $uniqueSlugs[] = $term1->slug; 
            }
        }   
    } 

    for ($var = 0; $var < count($uniqueTerms); $var++)
        echo '<li><a href="'.esc_url( home_url( '/catphoto/' ) ).$uniquePar.'/?mark='.$uniqueSlugs[$var].'">'.$uniqueTerms[$var].'</a></li>';
    echo '</ul>';
}

这里和那里的丑陋代码但是它有效。

现在在 taxonomy-catphoto.php 我填写:

$mark = $_GET['mark'];

之后在WP_Query查询中稍作修改

$query = new WP_Query( array( 'post_type' => 'photo', 'posts_per_page'=>56, 'paged'=> $paged, 'catphoto' => $term->name, 'mark' =>$mark) );

最好的问候,伊戈尔