programing

분류법 페이지에 태그 표시

css3 2023. 3. 16. 21:42

분류법 페이지에 태그 표시

현재 CMS에 커스텀 투고 타입의 싱글 페이지에 태그를 추가하는 옵션이 있습니다.

이제 이 태그를 '특징' 아이템으로 표시하고 싶습니다.따라서 my taxonomy-'filename'에서는 태그를 수집하여 taxonomy 페이지에 표시하는 다음 코드를 사용합니다.

            <?php 
        $args = array(
          'tag_slug__and' => array('sector1'),
          'post_type' => array( 'sectors' )
          );
        $loop = new WP_Query( $args );
        while ($loop->have_posts() ) : $loop->the_post();
        ?>
        <a href="<?php echo get_permalink(); ?>">
         <?php echo "<div class='col-md-6' style='margin-bottom:20px;'>"; ?>
         <div class="row mobilemargin">
          <div class="categorytiletextsector1">
            <div class="col-md-6 col-sm-6 col-xs-12 nopr"><?php echo get_the_post_thumbnail( $page->ID, 'categoryimage', array('class' => 'sector1img hovereffect')); ?> </div>
            <div class="col-md-6 col-sm-6 col-xs-12">
              <div class="testdiv">
               <h5><?php the_title(); ?></h5>
               <p><?php the_excerpt(); ?></p>
             </div>
           </div>
         </div>
       </div>
       <?php echo "</div>"; ?>

     </a>
   <?php endwhile; ?>
   <?php wp_reset_query(); ?>

여기서 문제가 되는 것은 택사노미 페이지에서 설정된 대로 선택한 태그가 모든 카테고리 페이지에 표시됩니다.

현재 카테고리로만 설정하려면 어떻게 해야 합니까?

제 아이템이 '카테고리 A'에 있으면 'A' 카테고리 페이지만 아이템 카테고리를 사용하여 표시됩니까?

어떤 도움이라도 좋습니다

편집. 이 코드가 작동하길 바라며 사용했지만, 운이 없었습니다.

$args = array(
    'tag_slug__and' => array( 'sector1' ),
    'post_type'     => array( 'sectors' ),
    'tax_query'     => array(
        array(
            'taxonomy' => 'sectors',
            'terms'    => get_queried_object_id(),
        ),
    ),
);

문제는 커스텀 쿼리입니다.여기서 한 가지 매우 중요한 점은 절대 변경하지 말고 모든 유형의 아카이브 페이지 또는 홈 페이지에서 기본 쿼리를 사용자 지정 쿼리로 바꾸라는 것입니다.저는 최근에 이 게시물에 모든 것을 자세히 설명했습니다.꼭 읽어보시고 링크된 모든 게시물을 읽어보시기 바랍니다.이것이 당신에게 많은 도움이 될 것입니다.

커스텀 쿼리를 삭제하고 이를 기본 루프로 대체하는 것이 해결책입니다.

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();

        // Your template tags and html mark up

    }
}

기본 쿼리에서 변경해야 할 사항이 있는 경우pre_get_posts그렇게 하기 위해서

편집

여기서 가장 좋은 생각은 풀로 사용하는 것입니다.tax_query선택한 분류법 용어 및 태그에 있는 게시물을 표시하려면

다음과 같은 방법을 사용할 수 있습니다. (최소한 PHP 5.4+가 필요합니다. 또, 이것은 테스트되지 않았습니다.)

$q = get_queried_object();
$args = [
    'post_type' => 'sectors',
    'tax_query' => [
        [
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ],
        [
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
        ],
    ],
];

이전 버전의 PHP의 경우 다음을 사용하십시오.

$q = get_queried_object();
$args = array(
    'post_type' => 'sectors',
    'tax_query' => array(
        array(
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
        ),
    ),
);

편집 2

에 있는 투고를 제외하려면sector1태그 및 기타sectorX태그, 다음 작업을 수행할 수 있습니다.

다음과 같은 방법을 사용할 수 있습니다. (최소한 PHP 5.4+가 필요합니다. 또, 이것은 테스트되지 않았습니다.)

$q = get_queried_object();
$args = [
    'post_type' => 'sectors',
    'tax_query' => [
        [
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ],
        [
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
            'operator' => 'NOT_IN'
        ],
    ],
];

이전 버전의 PHP의 경우 다음을 사용하십시오.

$q = get_queried_object();
$args = array(
    'post_type' => 'sectors',
    'tax_query' => array(
        array(
            'taxonomy' => $q->taxonomy,
            'terms' => $q->term_id,
            'include_children' => false // Exclude child terms
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => 'sector1', //I believe this is the slug
            'operator' => 'NOT_IN'
        ),
    ),
);

태그 배열은 에 전달할 수 있습니다.terms이와 같은 파라미터

'terms' => array( 'sector1', 'sector2', 'etc' ),

또는 쇼트 어레이 구문

'terms' => ['sector1', 'sector2', 'etc'],

편집 3

이것이 메인 쿼리이기 때문에 몇 가지 변경이 필요합니다.말씀드렸듯이 커스텀 쿼리를 삭제합니다.주루프는 이렇게 생겼어야 합니다.

<?php if (have_posts()) : ?> 
    <?php while (have_posts()) : the_post(); ?> 
        <a href="<?php echo get_permalink(); ?>"> 
        <?php echo "<div class='col-md-6 col-sm-6 col-xs-12' style='margin-bottom:30px;'>"; ?> 
        <div class="row mobilemargin"> 
            <div class="categorytiletext2"> 
                <div class="col-md-6 col-sm-12 col-xs-12 nopr"><?php echo get_the_post_thumbnail( $page->ID, 'categoryimage', array('class' => 'hovereffect newimgheight')); ?> </div> 
                <div class="col-md-6 col-sm-12 col-xs-12 mobilewhite"> 
                    <div class="testdiv"> 
                        <h5 class="captext"><?php the_title(); ?></h5> 
                        <?php $trimexcerpt = get_the_excerpt(); 

                        $shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 10, $more = '… ' ); 

                        echo '<a href="' . get_permalink() . '"><p>' . $shortexcerpt . '</p></a>'; 

                        ?> 
                    </div> 
                </div> 
            </div> 
        </div> 
        <?php echo "</div>"; ?> 

        </a> 
        <!-- If there is no posts, display an error message --> 
    <?php endwhile; 
else: ?> 
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> 
<?php endif; ?> 
<!-- If there is no posts, display an error message -->

이제 를 사용할 수 있습니다.pre_get_posts분류법 페이지에서 원하는 태그를 제거합니다.functions.php에서 다음을 수행합니다(PHP 5.3+필요하며 테스트되지 않았습니다).

add_action( 'pre_get_posts', function ( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
       $q->set( 'tag__not_in', array( 145 ) );
    }
});

이전 버전의 경우 를 사용합니다.

add_action( 'pre_get_posts', 'so30256167_remove_tags' );
function so30256167_remove_tags( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
       $q->set( 'tag__not_in', array( 145 ) );
    }
}

옷 갈아입는 거 잊지 마145정확한 태그 ID 또는 태그 ID 배열로 이동합니다.

편집 4

ID 는, 「ID」를 사용할 수 .get_term_by()태그 슬러그에서 태그 ID를 얻을 수 있습니다.다음과 같은 기능이 있습니다. (PHP 5.3+가 필요하며 테스트되지 않음)

add_action( 'pre_get_posts', function ( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
        $tag_object = get_term_by( 'slug', 'sector1', 'post_tag' ); 
        $tagID = $tag_object->term_id; 

       $q->set( 'tag__not_in', array( $tagID ) );
    }
});

이전 버전의 경우 를 사용합니다.

add_action( 'pre_get_posts', 'so30256167_remove_tags' );
function so30256167_remove_tags( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
        $tag_object = get_term_by( 'slug', 'sector1', 'post_tag' ); 
        $tagID = $tag_object->term_id; 

       $q->set( 'tag__not_in', array( $tagID ) );
    }
}

태그 슬러그의 배열이 있는 경우 다음을 교체할 수 있습니다.

$tag_object = get_term_by( 'slug', 'sector1', 'post_tag' ); 
$tagID = $tag_object->term_id; 

$q->set( 'tag__not_in', array( $tagID ) );/*

와 함께

$tag_array = array( 'slug1', 'slug2', 'slug3' );
foreach ( $tag_array as $tag ) {
    $tag_object = get_term_by( 'slug', $tag, 'post_tag' ); 
    $tagids[] = $tag_object->term_id;
} 
$q->set( 'tag__not_in', $tagids );

거기에 맞춰 슬러그만 갈아 끼우면 돼

편집 5

php를 사용하여 php를 pre_get_posts 한다

add_action( 'pre_get_posts', 'so30256167_remove_tags' );
function so30256167_remove_tags( $q )
{
    if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) {
        $tag_array = array( 'sector1', 'sector2', 'sector3', 'sector4' );
        foreach ( $tag_array as $tag ) {
            $tag_object = get_term_by( 'slug', $tag, 'post_tag' ); 
            $tagids[] = $tag_object->term_id;
        } 
        $q->set( 'tag__not_in', $tagids );    
    }
}

언급URL : https://stackoverflow.com/questions/30256167/displaying-tags-on-taxonomy-page