플러그인 파일을 커스텀 페이지 템플릿으로 등록하는 워드 프레스 플러그인이 있습니까?


9

wp-admin에서 사용자 정의 페이지 템플리트를 사용 가능하게하는 플러그인을 작성해야합니다. 꽤 전형적인 프로세스처럼 보이기 때문에 누군가 이미이 문제를 해결했는지 궁금합니다.


나는 그 질문을 이해하지 못한다. 플러그인에 정의 된 맞춤 템플릿을 삽입하는 플러그인이 필요하십니까?
— Steven

답변:


7

Rarst가 대답 한 것처럼 코어 파일을 편집하거나 페이지 속성 메타 박스를 제거하지 않고 약간의 수정으로 동일한 코드를 사용하여 만들 수 있습니다. 아래 코드는 /admin/include/meta-boxes.php의 코드이며 추가 페이지 템플릿 옵션의 위치를 ​​나타내는 주석을 추가했습니다.

function page_attributes_meta_box($post) {
    $post_type_object = get_post_type_object($post->post_type);
    if ( $post_type_object->hierarchical ) {
        $pages = wp_dropdown_pages(array('post_type' => $post->post_type, 'exclude_tree' => $post->ID, 'selected' => $post->post_parent, 'name' => 'parent_id', 'show_option_none' => __('(no parent)'), 'sort_column'=> 'menu_order, post_title', 'echo' => 0));
        if ( ! empty($pages) ) {
        ?>
        <p><strong><?php _e('Parent') ?></strong></p>
        <label class="screen-reader-text" for="parent_id"><?php _e('Parent') ?></label>
        <?php echo $pages; ?>
        <?php
        } // end empty pages check
    } // end hierarchical check.
    if ( 'page' == $post->post_type && 0 != count( get_page_templates() ) ) {
        $template = !empty($post->page_template) ? $post->page_template : false;
        ?>
        <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); ?>

        // add your page templates as options

        </select>
        <?php
    } ?>
    <p><strong><?php _e('Order') ?></strong></p>
    <p><label class="screen-reader-text" for="menu_order"><?php _e('Order') ?></label><input name="menu_order" type="text" size="4" id="menu_order" value="<?php echo esc_attr($post->menu_order) ?>" /></p>
    <p><?php if ( 'page' == $post->post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?></p>
    <?php
}

이것이 귀하의 경우에 수정인지는 모르지만 플러그인 내장 테마에 게시물 유형을 표시해야 할 때 스마일 러 사례가 있었고 사용 add_filter('the_content', 'my-function'); 하고 내 기능으로 출력을 표시했습니다.

또 다른 옵션은 플러그인이 현재 테마 디렉토리에 템플릿 파일을 작성하도록하는 것입니다.

function create_plugins_theme_file(){
    $file_name = TEMPLATEPATH . '/' . $tamplate_name . '.php';
    $handle = fopen($file_name, 'w') or wp_die('Cannot open file for editing');
    $file_contents = <<<OUT
<?php
/*
Template Name: $tamplate_name
*/
?>

//you theme file here

OUT;

   fwrite($handle, $file_contents);
   fclose($handle);
 }

파일이 있는지 먼저 확인한 후에 실행할 수 있습니다.

if(!file_exists( $file_name)){create_plugins_theme_file();}

이 중 하나가 도움이 되길 바랍니다.


내 대답에 따라 버스, 메타 박스 물건을 테스트 할 것입니다-문제의 일부일뿐입니다. 다른 테마는 테마 디렉토리에있는 경우에만 템플릿을로드하려고하는 코드입니다. 따라서 "외부"템플릿 파일을 제공하는 것만으로는 충분하지 않을 수 있습니다.
— Rarst

그렇기 때문에 플러그인이 테마 디렉토리에 파일을 만들도록 제안했습니다.
— Bainternet

2

나는 당신이 달성하려고하는 것을 적어도 확실하게 확신하지 못합니다. 적어도 플러그인이 그렇게하기를 원할 것입니다.

다른 페이지 템플리트를 작성하는 일반적인 절차는 다음과 같습니다.

  1. ACTIVE 테마 디렉토리에 새 페이지 템플리트를 작성하십시오 (page.php 사본 작성).

  2. 템플릿 이름 (파일 내부)을 변경하십시오.

    / * 템플릿 이름 : 전체 너비 페이지 * /

  3. 달성하려는 페이지 코드를 변경하십시오.

  4. 이제 새 페이지를 만들고 사용할 "템플릿"을 선택할 수 있습니다.

대체 텍스트

...

그게 당신이 달성하려는 것입니까?

공식 문서 : http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates


웁스. 샘플 PHP 코드가 약간 엉망입니다. 적절한 코드 예제를 보려면 링크를 방문하십시오.
— Lars Koudal

2
누구나 기존 플러그인에서 Jan의 메소드를 사용하고 있는지 알고
— 싶습니다

@trnsfrmr은 플러그인 활성화 후 사용자 가이 템플릿을 사용할 수 있도록 자체 플러그인 내에 미리 정의 된 페이지 템플릿 (1 ~ 3 단계)을 만드는 방법을 찾고 있다고 생각합니다. 그가이 솔루션 테마를 독립적으로 유지하고 싶다고 생각합니다.
— Michal Mau

좋아, 아, 거기 :-) 해명 주셔서 감사합니다 약간의 오해
— 라스 Koudal을

2

이것은 달성하기가 매우 어려워 보입니다. get_page_templates()이 함수는 상위 및 하위 루트 디렉토리에없는 것을 적극적으로 버립니다. 또한 전역 변수에 저장하지 않거나 생성 된 템플릿 목록을 필터링 할 수 있습니다.

나는 페이지 속성 메타 박스가 포크되어야하고 이것을 대체해야한다고 생각합니다. 그리고 그때조차 가능하지는 않습니다.

나는 이것이 의미있는 것으로 보이지만 WordPress 코드는 명명 된 템플릿이 테마 디렉토리에서만 나오기를 원한다는 점에서 매우 정확합니다.


1

register_theme_directory()소개 된 이유 중 하나를 수행하지 않습니까?

http://core.trac.wordpress.org/ticket/10467

당시 BuddyPress와 관련된 문제였으며, 여기저기서 추가 템플릿을 던지기를 원했습니다.

그래도 페이지 템플릿으로 올바르게 나열되지 않은 것으로 생각합니다.

http://core.trac.wordpress.org/ticket/15803


코드를 살펴볼 것입니다 (아마 내일). 이름이있는 템플릿은 경로 상수를 통해서만 명시 적으로 조회됩니다.
— Rarst
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.