programing

사용자 지정 게시 유형 및 카테고리에 따라 표시에 카테고리 추가

bestprogram 2023. 3. 13. 21:12

사용자 지정 게시 유형 및 카테고리에 따라 표시에 카테고리 추가

는 flozo라는 이름의 워드프레스 사이트를 만들고 있습니다.라는 이름의 커스텀 투고 타입이 있습니다.work각 카테고리에 따라 템플릿에 작품을 표시하고 싶었습니다.

코드는 다음과 같습니다.

<?php
$args = array( 'post_type' => 'work', 'posts_per_page' => 15 );
$loop = new WP_Query( $args );
$count = 0;
echo '<ul>';
while ( $loop->have_posts() ) : $loop->the_post();

    $count++;
    $class = ($count % 3 == 1) ? 'first' : '';

    echo '<li class="'.$class.'">';
    echo '<a href="';
    the_permalink();
    echo '">';
    echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
    the_post_thumbnail('full');
    echo '</a>';

    echo '<br />';

    echo '<h2><a href="';
    the_permalink();
    echo '">';
    the_title();
    echo '</a></h2>';

    echo '<div class="entry-content">';
    echo limit_words(get_the_excerpt(), '30'); 
    echo '..</div>';
    echo '</li>';
endwhile;
echo '</ul>';
?>

추가했습니다.

 $args = array( 'post_type' => 'work', 'tag_ID' => 15 ,'posts_per_page' => 15 );

어디에15카테고리의 ID이지만, 동작하지 않았습니다.

나도 해봤어

<?php
$catquery = new WP_Query( 'cat=15&posts_per_page=3' );
while($catquery->have_posts()) : $catquery->the_post();
?>
<ul class="last-cat">
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_post_thumbnail(); ?> <p><?php     the_title(); ?></p><span><?php echo get_the_date(); ?></span></a></li></ul>
<?php endwhile; ?>

그것도 도움이 안 됐어요

편집:

카테고리 URL은

http://jointviews.com/wp-admin/edit-tags.php?action=edit&taxonomy=categories&tag_ID=15&post_type=work

투고 타입의 등록 코드는 다음과 같습니다.

add_action('init', 'work_register');   

function work_register() {   

$labels = array( 
    'name' => _x('Work', 'post type general name'), 
    'singular_name' => _x('Work Item', 'post type singular name'), 
    'add_new' => _x('Add New', 'work item'), 
    'add_new_item' => __('Add New Work Item'), 
    'edit_item' => __('Edit Work Item'), 
    'new_item' => __('New Work Item'), 

    'view_item' => __('View Work Item'), 
    'search_items' => __('Search Work'), 
    'not_found' => __('Nothing found'), 
    'not_found_in_trash' => __('Nothing found in Trash'), 
    'parent_item_colon' => '' 
);   

$args = array( 
    'labels' => $labels, 
    'public' => true, 
    'publicly_queryable' => true, 
    'show_ui' => true, 
    'query_var' => true, 
    'menu_icon' => get_stylesheet_directory_uri() . '/article16.png', 
    'rewrite' => array( 'slug' => 'work', 'with_front'=> false ), 'capability_type' => 'post', 
    'hierarchical' => true, 
    'menu_position' => null, 
    'supports' => array('title','editor','thumbnail') 
);   

register_post_type( 'work' , $args ); 

register_taxonomy("categories", array("work"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Category", "rewrite" => array( 'slug' => 'work', 'with_front'=> false )));



}

다른 답변은 모두 틀렸습니다. 특히 OP의 답변은 정확하지 않습니다. query_posts절대 사용해서는 안 됩니다.코덱스에도 기재되어 있기 때문에, 코덱스를 읽어 주세요.또한 기본 쿼리를 사용자 지정 쿼리로 바꾸면 안 됩니다.

해결책은 아래에 설명한 바와 같이 간단하고 올바른 방법입니다.

원래의 회답

여기 몇 가지 결점이 있어요

  • 커스텀 투고 타입에 아카이브를 설정하려면 , 다음의 설정을 실시할 필요가 있습니다.has_archive에 대한 파라미터true커스텀 포스트 타입 등록 인수로 지정합니다.참조

  • 페이지와 같은 커스텀 투고 유형을 사용하지 않을 경우hierarchical에 대한 파라미터false이것을 true로 설정하면 Wordpress가 페이지와 마찬가지로 각 투고에 대해 트리를 작성하려고 하기 때문에 투고가 증가함에 따라 백엔드가 상당히 느려집니다.

  • 기본 쿼리 대신 사용자 지정 쿼리를 사용하지 마십시오.그것은 항상 더 귀찮고 자원의 낭비이다.사용자 지정 쿼리를 올바르게 사용하는 위치와 시기에 대한 자세한 설명은 이 게시물을 참조하십시오.

  • 이 점은 앞의 점을 확장한 것입니다.기본 쿼리를 변경해야 할 경우pre_get_posts그렇게 하기 위해서.이 파라미터는 다음과 같은 정확한 파라미터를 사용합니다.WP_Query메인 쿼리가 사용하는 바와 같이WP_Query포스트를 가져옵니다.위의 링크 게시물에 모두 설명되어 있습니다.

  • 사용자 지정 쿼리의 주요 결함은 범주, 태그 및 사용자 지정 분류법의 차이를 이해하지 못하는 것입니다.저는 이것에 대해 완전한 투고(여기서 읽을 수 있습니다)를 써, 실제로 코덱스에도 기입했습니다.사용자 정의 분류법을 사용 중이므로 범주 매개 변수가 작동하지 않습니다.커스텀 분류에는 를 사용해야 합니다.

문제를 해결하려면 , 다음의 순서에 따릅니다.

  • , 그럼 여기에다가 더해져요.has_achive할 때 를 지정하고, 을 「 등록」으로 합니다.true 「 」를 설정합니다hierarchical to " " 。false커스텀 투고 타입에서도 마찬가지입니다.(커스텀 분류법에 대해서는 설정하지 마십시오.이것에 의해 분류법이 통상의 태그와 같이 동작합니다.)

  • 그런 다음 "설정" 아래에 있는 permalink 페이지를 방문하여 "업데이트"를 클릭하여 다시 쓰기 규칙을 수정합니다.

  • 홈페이지를 방문하여 새 규칙이 저장되었는지 확인하십시오.

  • 커스텀 쿼리를 삭제하고 기본 루프로 돌아갑니다.의 ★★★★★★★★★★★★★★★★★.archive-work.php 이어야 한다

    if( have_posts() ) {
        while( have_posts() ) {
            the_post();
    
            // Your custom markup and template tags
    
        }
    }
    
  • 가 있는 는, 「」를 합니다.taxonomy.php,taxonomy-{$taxonomy}.php ★★★★★★★★★★★★★★★★★」taxonomy-{$taxonomy}-{$term}.php템플릿입니다.자세한 내용은 템플릿 계층 확인

편집 1

용어에 가 있는 의 조작 에, 「」를 사용해 .pre_get_posts

add_action( 'pre_get_posts', function ( $q ) {

    if( !is_admin() && $q->is_main_query() && is_post_type_archive( 'work' ) ) {
        $q->set( 'categories', 'slides' );
    }

});

편집 2

이 문제를 해결하기 위한 코드입니다.

투고 유형을 등록할 코드 대신 다음 코드를 복사하여 붙여넣습니다.를를 the the the the the the the the the the the 했습니다.has_archive파라미터를 지정합니다.도 '개서하다'로 했습니다.categories커스텀 포스트 타입과 분류 모두 같은 slug를 가지고 있는 것은 매우 곤란합니다.하지 않고, 빗나가게 합니다.

add_action( 'init', 'work_register' );   

function work_register() {   

    $labels = array( 
        'name' => _x('Work', 'post type general name'), 
        'singular_name' => _x('Work Item', 'post type singular name'), 
        'add_new' => _x('Add New', 'work item'), 
        'add_new_item' => __('Add New Work Item'), 
        'edit_item' => __('Edit Work Item'), 
        'new_item' => __('New Work Item'), 

        'view_item' => __('View Work Item'), 
        'search_items' => __('Search Work'), 
        'not_found' => __('Nothing found'), 
        'not_found_in_trash' => __('Nothing found in Trash'), 
        'parent_item_colon' => '' 
    );   

    $args = array( 
        'labels' => $labels, 
        'public' => true, 
        'publicly_queryable' => true, 
        'show_ui' => true, 
        'query_var' => true, 
        'menu_icon' => get_stylesheet_directory_uri() . '/article16.png', 
        'rewrite' => array( 'slug' => 'work', 'with_front'=> false ), 
        'capability_type' => 'post', 
        'hierarchical' => true,
        'has_archive' => true,  
        'menu_position' => null, 
        'supports' => array('title','editor','thumbnail') 
    );   

    register_post_type( 'work' , $args ); 

    register_taxonomy( 'categories', array('work'), array(
        'hierarchical' => true, 
        'label' => 'Categories', 
        'singular_label' => 'Category', 
        'rewrite' => array( 'slug' => 'categories', 'with_front'=> false )
        )
    );

    register_taxonomy_for_object_type( 'categories', 'work' ); // Better be safe than sorry
}

archive-work.php에서 커스텀 쿼리를 이 코드로 바꿉니다.

<?php

$count = 0;
echo '<ul>';
while ( have_posts() ) : the_post();

    $count++;
    $class = ($count % 3 == 1) ? 'first' : '';

    echo '<li class="'.$class.'">';
    echo '<a href="';
    the_permalink();
    echo '">';
    echo '<div class="overlay" style="background-color:'.ot_get_option( 'main_colour' ).';"></div>';
    the_post_thumbnail('full');
    echo '</a>';

    echo '<br />';

    echo '<h2><a href="';
    the_permalink();
    echo '">';
    the_title();
    echo '</a></h2>';

    echo '<div class="entry-content">';
    echo limit_words(get_the_excerpt(), '30'); 
    echo '..</div>';
    echo '</li>';
endwhile;
echo '</ul>';
?>

매우 중요 -> OK, 백엔드(관리 영역)의 [설정]> [퍼멀링크]에 접속하여 [변경사항 저장]을 클릭합니다.이렇게 하면 퍼머링크가 플러싱되고 새로운 퍼머링크 구조가 설정됩니다.

방문 시 커스텀 투고 타입의 투고가 모두 표시됩니다.

http://example.com/work/

<?php
query_posts( array( 'post_type' => 'work', 'categories' => 'slides' ) );
//the loop start here
if ( have_posts() ) : while ( have_posts() ) : the_post();
?>
<h3><?php the_title(); ?></h3>
<?php the_content(); ?>
<?php endwhile; endif; wp_reset_query(); ?>

나는 마침내 여기서 완벽하게 그것을 얻었다.

아래 코드로 시험해 보세요.

<?php 

$args = array( 'posts_per_page' => 5,'post_type' => 'work','category' => 15 );

$myposts = get_posts( $args );
foreach ( $myposts as $post ):?>
<li>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>

언급URL : https://stackoverflow.com/questions/27896131/add-categories-to-custom-post-type-and-display-based-on-categories