WordPress에 현재 게시된 사용자 정의 분류법 표시
WordPress에서 커스텀 분류법을 작성했는데 포스트에 현재 포스트 분류법을 목록으로 표시하려고 합니다.
다음 코드를 사용하여 "직업 분야"라는 사용자 정의 분류법을 표시하고 있습니다.
<ul>
<?php $args = array('taxonomy' => 'job_discipline'); ?>
<?php $tax_menu_items = get_categories( $args );
foreach ( $tax_menu_items as $tax_menu_item ):?>
<li>
Job Discipline: <a href="<?php echo get_term_link($tax_menu_item,$tax_menu_item->taxonomy); ?>">
<?php echo $tax_menu_item->name; ?>
</a>
</li>
<?php endforeach; ?>
</ul>
그것은 내가 나열하고 싶은 많은 분류법들 중 하나일 뿐이다.
문제는 위의 코드에 현재 포스트 분류법이 아닌 적어도1개의 포스트가 있는 모든 "작업 분야"가 표시되어 있다는 것입니다.
어떻게 하면 이 문제를 해결할 수 있을까요?
현재 포스트 분류법 및 용어를 표시하는 방법
다음은 Codex(아래 링크 참조)에서 수정된 코드입니다.이 코드는 현재 게시물의 모든 분류법을 첨부한 용어와 함께 표시합니다.
<?php
// get taxonomies terms links
function custom_taxonomies_terms_links() {
global $post, $post_id;
// get post by post id
$post = &get_post($post->ID);
// get post type by post
$post_type = $post->post_type;
// get post type taxonomies
$taxonomies = get_object_taxonomies($post_type);
$out = "<ul>";
foreach ($taxonomies as $taxonomy) {
$out .= "<li>".$taxonomy.": ";
// get the terms related to post
$terms = get_the_terms( $post->ID, $taxonomy );
if ( !empty( $terms ) ) {
foreach ( $terms as $term )
$out .= '<a href="' .get_term_link($term->slug, $taxonomy) .'">'.$term->name.'</a> ';
}
$out .= "</li>";
}
$out .= "</ul>";
return $out;
} ?>
이것은 다음과 같이 사용됩니다.
<?php echo custom_taxonomies_terms_links();?>
데모 출력
현재 게시물에 분류법이 있는 경우 출력은 다음과 같을 수 있습니다.country
그리고.city
:
<ul>
<li> country:
<a href="http://example.com/country/denmark/">Denmark</a>
<a href="http://example.com/country/russia/">Russia</a>
</li>
<li> city:
<a href="http://example.com/city/copenhagen/">Copenhagen</a>
<a href="http://example.com/city/moscow/">Moscow</a>
</li>
</ul>
언급
Codex의 원래 코드 예는 다음과 같습니다.
http://codex.wordpress.org/Function_Reference/get_the_terms#Get_terms_for_all_custom_taxonomies
이것이 도움이 되기를 바랍니다.-프로젝트에 맞게 조정해 주실 수 있을 것입니다.-)
갱신하다
그러나 모든 것을 표시하지 않고 일부만 표시하려면 어떻게 해야 합니까?또한 분류법에 밑줄로 이름을 붙이는 대신 직접 이름을 붙이고 싶습니다.내가 어떻게 그걸 할 수 있는지 알기나 해?
이를 실현하기 위한 한 가지 수정사항을 다음에 제시하겠습니다.
function custom_taxonomies_terms_links() {
global $post;
// some custom taxonomies:
$taxonomies = array(
"country"=>"My Countries: ",
"city"=>"My cities: "
);
$out = "<ul>";
foreach ($taxonomies as $tax => $taxname) {
$out .= "<li>";
$out .= $taxname;
// get the terms related to post
$terms = get_the_terms( $post->ID, $tax );
if ( !empty( $terms ) ) {
foreach ( $terms as $term )
$out .= '<a href="' .get_term_link($term->slug, $tax) .'">'.$term->name.'</a> ';
}
$out .= "</li>";
}
$out .= "</ul>";
return $out;
}
부모별로 그룹화하여 표시하고 싶은 경우를 대비해서.
기본적으로 위와 같은 답변입니다.https://stackoverflow.com/a/12144671의 다른 투고에서 이 답변을 사용하여 (ID 및 부모별로) 그룹화했습니다.
개체와 함께 사용하도록 수정된 함수:
function object_group_assoc($array, $key) {
$return = array();
foreach($array as $object) {
$return[$object->$key][] = $object;
}
return $return;
}
최종 기능:
// get taxonomies terms links
function custom_taxonomies_terms_links() {
global $post, $post_id;
// get post by post id
$post = &get_post($post->ID);
// get post type by post
$post_type = $post->post_type;
// get post type taxonomies
$taxonomies = get_object_taxonomies($post_type);
$out = "<ul>";
foreach ($taxonomies as $taxonomy) {
$out .= "<li>".$taxonomy.": ";
// get the terms related to post
$terms = get_the_terms( $post->ID, $taxonomy );
if ( !empty( $terms ) ) {
$terms_by_id = object_group_assoc($terms, 'term_id');
$terms_by_parent = object_group_assoc($terms, 'parent');
krsort($terms_by_parent);
foreach ( $terms_by_parent as $parent_id => $children_terms ){
if($parent_id != 0){//Childs
//Add parent to out string
$parent_term = $terms_by_id[$parent_id][0]; //[0] because object_group_assoc return each element in an array
$out .= '<li><a href="' .get_term_link($parent_term->slug, $taxonomy) .'">'.$parent_term->name.'</a>';
//Add children to out string
$out .= '<ul>';
foreach ($children_terms as $child_term) {
$out .= '<li><a href="' .get_term_link($child_term->slug, $taxonomy) .'">'.$child_term->name.'</a></li>';
}
$out .= '</ul></li>';
} else {//parent_id == 0
foreach ($children_terms as $child_term) {
if(!array_key_exists($child_term->term_id, $terms_by_parent)){//Not displayed yet becouse it doesn't has children
$out .= '<li><a href="' .get_term_link($child_term->slug, $taxonomy) .'">'.$child_term->name.'</a></li>';
}
}
$out .= '</ul></li>';
}
}
}
$out .= "</li>";
}
$out .= "</ul>";
return $out;
}
같은 방법으로 사용:
<?php echo custom_taxonomies_terms_links();?>
주의: 한 레벨의 어린이 용어로만 작업합니다.
언급URL : https://stackoverflow.com/questions/15502811/display-current-post-custom-taxonomy-in-wordpress
'source' 카테고리의 다른 글
도메인에서 angularjs 앱을 호스팅하는 방법 (0) | 2023.03.17 |
---|---|
Spring Boot Post Request에서의 403 오류 해결 방법 (0) | 2023.03.17 |
질의의 설명 계획을 어떻게 해석합니까? (0) | 2023.03.17 |
정의되지 않은 jasmine test failed는 함수가 아닙니다($discounting).$$checkUrlChange() (0) | 2023.03.17 |
"proposal-numeric-separator" 플러그인을 찾을 수 없습니다. (0) | 2023.03.17 |