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


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.