플러그인에서 사용자 정의 페이지 템플리트를 작성하는 방법을 찾기 위해 지난 몇 시간 동안 둘러 보았지만 아직 운이 없었습니다.
내가 구체적으로하려고하는 것은 페이지를 편집 할 때 사용 가능한 페이지 템플릿 목록에 옵션을 추가하고 다른 방법을 사용 하지 않는 것입니다if( is_page( 'page-slug' ) ) { /* etc */ }
이를 위해 수정할 수있는 전역 변수가 있습니까?
편집하다:
현재 @ m0r7if3r이 주석으로 작성한 링크를 기반 으로이 코드를 사용하고 있습니다. 문제는 페이지를 볼 때이 기능을 실행하지만 페이지를 편집 할 때 (페이지 템플릿으로 드롭 다운 목록을 채우기 위해) 실행할 수 없다는 것입니다 :
class JW_SiteGrader {
private static $instance;
private function __construct() {
add_action( 'template_redirect', array( &$this, 'sitegrader_template_redirect' ), 20 );
}
public static function getInstance() {
// Return the class data in a Singleton fashion
if (self::$instance == null)
self::$instance = new JW_SiteGrader();
return self::$instance;
}
public function sitegrader_template_redirect() {
add_filter( 'page_template', array( &$this, 'sitegrader_page_template' ), 10, 1 );
}
public function locate_plugin_template( $template_names, $load = false, $require_once = true ) {
if ( !is_array( $template_names ) )
return '';
$located = '';
$this_plugin_dir = WP_PLUGIN_DIR . '/' . str_replace( basename( __FILE__ ), '', plugin_basename( __FILE__ ) );
foreach ( $template_names as $template_name ) {
if ( !$template_name )
continue;
if ( file_exists( STYLESHEETPATH . '/' . $template_name ) ) {
$located = STYLESHEETPATH . '/' . $template_name;
break;
} else if ( file_exists( TEMPLATEPATH . '/' . $template_name ) ) {
$located = TEMPLATEPATH . '/' . $template_name;
break;
} else if ( file_exists( $this_plugin_dir . $template_name ) ) {
$located = $this_plugin_dir . $template_name;
break;
}
}
if ( $load && '' != $located )
load_template( $located, $require_once );
return $located;
}
public function sitegrader_page_template( $template ) {
$object = get_queried_object();
if ( 'page' == $object->post_type ) {
// New
$templates[] = "page-sitegrader.php";
// Like in core
$templates[] = "page-{$object->post_type}.php";
$templates[] = "page.php";
return locate_template( $templates );
}
// return apply_filters('page_template', $template);
return $template;
}
}
편집 2 :
이 기능은 향후 업데이트에서 출시 될 것으로 보입니다. 이에 관한 꽤 많은 trac 티켓을 읽었으며 토론이 있었지만 실제 답변은 없습니다 (3.4에 대한 호핑). 여기에 trac 티켓 URL이 조금씩 나열됩니다.
편집 3 :
위 코드는 작동하지만 새 페이지를 편집 / 추가 할 때 드롭 다운 목록에 템플릿이 추가되지 않는다는 점이 유일합니다. 나는 몇 가지 일을 시도하고 있으며 곧 내 질문을 업데이트 할 것입니다.
page_template
후크를 사용하고 있으며 위의 편집에서 위의 코드는 현재 사용중인 것입니다. template_redirect
후크 를 사용한 다음 page_template
필터 를 추가해야 합니까?