Advanced Custom Fields라는 플러그인을 사용하려다가 맨땅에 코딩하는 것이 더 편할 것 같은 생각이 듭니다. 왜냐하면, 워드프레스 기본 function 외에 또 ACF의 라이브러리를 공부해야하기 때문에 머리가 지끈 거립니다. 그냥 워드프레스 기본 Function으로 해결할 수 있는 것은 플러그인 없이 해결해버리는 편이 편할 듯 싶습니다.
커스텀 포스트 타입 등록하기: 플러그인 만들기
- 워드프레스 ‘wp-content/plugins/’ 디렉토리 안에 ‘book-post-type-plugin’이라는 폴더를 만든다.
- book-post-type-plugin 디렉토리 안에 book-post-type-plugin.php 라는 파일을 만든다. 아래 참조
book-post-type-plugin.php 내용
플러그인 헤더
<?php
/*
Plugin Name: Book Post Type Plugin
Description: This plugin registers a custom post type called 'book'.
Version: 1.0
Author: Your Name
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
book 이라는 커스텀 포스트 타입 등록
// Register Custom Post Type
function custom_post_type_book() {
$labels = array(
'name' => _x( 'Books', 'Post Type General Name', 'book-post-type-plugin' ),
'singular_name' => _x( 'Book', 'Post Type Singular Name', 'book-post-type-plugin' ),
'menu_name' => __( 'Books', 'book-post-type-plugin' ),
// 아래는 선택사항
'name_admin_bar' => __( 'Book', 'book-post-type-plugin' ),
'archives' => __( 'Book Archives', 'book-post-type-plugin' ),
'attributes' => __( 'Book Attributes', 'book-post-type-plugin' ),
'parent_item_colon' => __( 'Parent Book:', 'book-post-type-plugin' ),
'all_items' => __( 'All Books', 'book-post-type-plugin' ),
'add_new_item' => __( 'Add New Book', 'book-post-type-plugin' ),
'add_new' => __( 'Add New', 'book-post-type-plugin' ),
'new_item' => __( 'New Book', 'book-post-type-plugin' ),
'edit_item' => __( 'Edit Book', 'book-post-type-plugin' ),
'update_item' => __( 'Update Book', 'book-post-type-plugin' ),
'view_item' => __( 'View Book', 'book-post-type-plugin' ),
'view_items' => __( 'View Books', 'book-post-type-plugin' ),
'search_items' => __( 'Search Book', 'book-post-type-plugin' ),
'not_found' => __( 'Not found', 'book-post-type-plugin' ),
'not_found_in_trash' => __( 'Not found in Trash', 'book-post-type-plugin' ),
'featured_image' => __( 'Featured Image', 'book-post-type-plugin' ),
'set_featured_image' => __( 'Set featured image', 'book-post-type-plugin' ),
'remove_featured_image' => __( 'Remove featured image', 'book-post-type-plugin' ),
'use_featured_image' => __( 'Use as featured image', 'book-post-type-plugin' ),
'insert_into_item' => __( 'Insert into book', 'book-post-type-plugin' ),
'uploaded_to_this_item' => __( 'Uploaded to this book', 'book-post-type-plugin' ),
'items_list' => __( 'Books list', 'book-post-type-plugin' ),
'items_list_navigation' => __( 'Books list navigation', 'book-post-type-plugin' ),
'filter_items_list' => __( 'Filter books list', 'book-post-type-plugin' ),
);
$args = array(
'label' => __( 'Book', 'book-post-type-plugin' ),
'description' => __( 'Post Type Description', 'book-post-type-plugin' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
'hierarchical' => true, // Hierarchical like pages
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-book-alt', // You can choose any icon from dashicons
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
);
register_post_type( 'book', $args );
}
add_action( 'init', 'custom_post_type_book', 0 );
번역 파일을 읽어오는 부분 추가
function book_post_type_plugin_load_textdomain() {
load_plugin_textdomain( 'book-post-type-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'book_post_type_plugin_load_textdomain' );
전체 코드 = 플러그인 헤더 + 커스텀 포스트 타입 등록 + 번역파일 로딩
번역파일 생성하기
여러분의 플러그인을 번역하는 방법은 Poedit와 같은 도구를 사용하여 번역 파일(.pot, .po 및 .mo 파일)을 생성하는 것입니다. 아래에 간단한 가이드를 제공해 드리겠습니다:
- Poedit 다운로드 및 설치: Poedit는 poedit.net에서 공식 웹사이트를 통해 다운로드할 수 있습니다. 컴퓨터에 설치하세요.
- .pot 파일 생성: 플러그인 디렉토리(
book-post-type-plugin
)에서languages
라는 새 디렉토리를 만드십시오.languages
디렉토리 안에book-post-type-plugin.pot
이라는 빈 파일을 생성하십시오. 이 파일은 번역의 템플릿 역할을 합니다. - 번역 가능한 문자열 추출: Poedit를 열고 새 카탈로그를 만듭니다. 언어를 플러그인의 기본 언어로 설정하세요(예: 영어). 그런 다음,
카탈로그
>POT 파일에서 업데이트
로 이동하여 이전에 생성한book-post-type-plugin.pot
파일을 선택하십시오. Poedit는 플러그인에서 번역 가능한 문자열을 추출할 것입니다. - 문자열 번역하기: Poedit는 플러그인에서 번역 가능한 모든 문자열을 나열할 것입니다. 이제 각 문자열을 원하는 언어로 번역하여 해당 필드에 번역합니다.
- 번역 저장하기: 모든 문자열을 번역했다면 번역을 저장합니다. Poedit는 .po 파일(예:
book-post-type-plugin-en_US.po
)과 .mo 파일(예:book-post-type-plugin-en_US.mo
)을book-post-type-plugin.pot
파일과 같은 디렉토리에 생성할 것입니다. - 플러그인에서 번역 불러오기: 플러그인에서 번역을 불러오려면
load_plugin_textdomain()
함수를 사용하여 .mo 파일을 로드해야 합니다. 이미 플러그인에 이 함수가 포함되어 있습니다:
function book_post_type_plugin_load_textdomain() { load_plugin_textdomain( 'book-post-type-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } add_action( 'plugins_loaded', 'book_post_type_plugin_load_textdomain' );
.mo 파일이 플러그인의 텍스트 도메인에 따라 이름이 지어져 있고(e.g., book-post-type-plugin-en_US.mo), 플러그인의 languages 디렉토리에 위치해 있는지 확인하십시오.
이제 여러분의 플러그인은 번역 가능하며 사용자들은 Poedit를 사용하여 .po 파일에서 문자열을 번역하여 다양한 언어로 번역할 수 있습니다. 만약, 번역파일을 만들지 않으면 기본언어로만 표시됩니다.
[Shortcode] 커스텀 포스트 타입 페이지 목록 생성
아래 쇼트코드 스니펫을 WPcode나 code snippets라는 플러그인을 사용하여 워드프레스에 포함시킵니다.
function list_custom_post_type_pages_shortcode( $atts ) {
// Extract shortcode attributes
$atts = shortcode_atts(
array(
'post_type' => 'your_custom_post_type', // Default custom post type
'level' => 1 // Default level
),
$atts,
'list_custom_post_type_pages'
);
// Ensure 'level' attribute is numeric
$level = intval( $atts['level'] );
// Query arguments to get pages of the specified level of the custom post type
$args = array(
'post_type' => $atts['post_type'],
'post_parent' => 0, // Only top-level pages
'posts_per_page' => -1,
'orderby' => 'menu_order',
'order' => 'ASC'
);
// If level is greater than 1, query for the specific level
if ( $level > 1 ) {
$args['post_parent'] = 0; // Reset post_parent
$args['meta_query'] = array(
array(
'key' => '_menu_item_menu_item_parent',
'value' => '0',
'compare' => '>',
'type' => 'NUMERIC',
),
);
}
$pages = new WP_Query( $args );
$output = '';
if ( $pages->have_posts() ) {
$output .= '<ul>';
while ( $pages->have_posts() ) {
$pages->the_post();
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
$output .= '</ul>';
}
wp_reset_postdata();
return $output;
}
add_shortcode( 'list_custom_post_type_pages', 'list_custom_post_type_pages_shortcode' );
다음과 같이 쇼트코드를 사용할 수 있게 됩니다:
[list_custom_post_type_pages]
to list top-level pages of the default custom post type.[list_custom_post_type_pages post_type="your_custom_post_type"]
to list top-level pages of a specific custom post type.[list_custom_post_type_pages level="2" post_type="your_custom_post_type"]
to list second-level pages of a specific custom post type.
[Shortcode] 커스텀 포스트 타입 자식 페이지 목록 생성
아래 쇼트코드 스니펫을 WPcode나 code snippets라는 플러그인을 사용하여 워드프레스에 포함시킵니다.
function list_children_shortcode( $atts ) {
// Extract shortcode attributes
$atts = shortcode_atts(
array(
'post_type' => 'your_custom_post_type' // Default custom post type
),
$atts,
'list_children'
);
// Query arguments
$args = array(
'post_type' => $atts['post_type'],
'post_parent' => get_the_ID(),
'posts_per_page' => -1,
'orderby' => 'menu_order',
'order' => 'ASC'
);
$children = new WP_Query( $args );
$output = '';
if ( $children->have_posts() ) {
$output .= '<ul>';
while ( $children->have_posts() ) {
$children->the_post();
$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
$output .= '</ul>';
}
wp_reset_postdata();
return $output;
}
add_shortcode( 'list_children', 'list_children_shortcode' );
Shortcode 형식: