programing

Wordpress에서 사용자 지정 게시물 유형에 대한 템플릿 만들기

topblog 2023. 10. 15. 16:56
반응형

Wordpress에서 사용자 지정 게시물 유형에 대한 템플릿 만들기

특정 페이지에 대한 사용자 지정 템플릿을 만드는 방법을 알고 있습니다.그러나 특정 사용자 지정 게시물 유형에 대한 템플릿을 만들고 싶습니다.그것이 가능하고 사실이라면 어떻게 해야 합니까?

새 템플릿을 만들면 페이지를 추가할 때만 관리자에게 표시되지만 새 게시 유형을 추가할 때는 특정 템플릿을 선택할 수 있는 옵션이 없습니다.

문제 해결:

/* 
Show the list of available custom templates templates in the Custom Post Type admin section
*/

/**
 * Post_type
 */
define( 'MY_THEME_POST_TYPE', 'cases' );
/**
 * Load the page template for any post object
 * having the appropriate meta key set.
 */
add_action( 'template_redirect', 'mytheme_template_redirect' );
function mytheme_template_redirect() {
    global $wp_query;
    $id = (int) $wp_query->get_queried_object_id();
    $template = get_post_meta( $id, '_wp_page_template', true );
    if ( $template && 'default' !== $template ) {
        $file = STYLESHEETPATH . '/' . $template;
        if( is_file( $file ) ) {
            require_once $file;
            exit;
        }
    }

}
/**
 * Process the Meta Box
 * @todo Permissions check.
 * @todo Filter input.
 * @todo Nonces.
 */
add_action( 'save_post', 'mytheme_process_resource_template' );
function mytheme_process_resource_template() {
    global $post;

    /* Sanitize $_POST array. */
    $clean_id = ( isset( $_POST['ID'] ) ) ? intval( $_POST['ID'] ) : 0;

    if ( !empty( $_POST['page_template'] ) && MY_THEME_POST_TYPE == $post->post_type ) {
        $page_templates = get_page_templates();
        if ( 'default' != $page_template && !in_array( $_POST['page_template'], $page_templates ) ) {
            if ( $wp_error )
                return new WP_Error('invalid_page_template', __('The page template is invalid.'));
            else
                return 0;
        }
        update_post_meta( $clean_id, '_wp_page_template',  $_POST['page_template'] );
    }
}
/**
 * Registers the Meta Box
 * @uses mytheme_page_attributes_meta_box()
 */
add_action( 'admin_init', 'mytheme_register_meta_boxes', 10 );
function mytheme_register_meta_boxes()  {
    add_meta_box(
        'mytheme_post_type_template',
        'Template',
        'mytheme_page_attributes_meta_box',
        MY_THEME_POST_TYPE,
        'side',
        'low'
        );
}
/**
 * Creates the Meta Box
 */
function mytheme_page_attributes_meta_box() {
    global $post;
    $post_type_object = get_post_type_object($post->post_type);    
    if ( 0 != count( get_page_templates() ) ) {
        $template = get_post_meta( $post->ID, '_wp_page_template',  true );
        ?>
<p><strong><?php _e('Template') ?></strong></p>
<label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php page_template_dropdown( $template ); ?>
</select>
<?php
    }
}

다음 페이지를 만듭니다.

단일 {cpt-slug}.단품과 같은 phpphp

사용자 지정 게시물 유형의 페이지를 표시할 때 사용됩니다. 즉, 누군가가 http://example.com/product/awesome-shoes/ 에 갈 때 사용됩니다.

언급URL : https://stackoverflow.com/questions/7243990/create-template-for-custom-post-types-in-wordpress

반응형