ฉันดูรอบสองสามชั่วโมงที่ผ่านมาเพื่อสร้างแม่แบบหน้ากำหนดเองจากภายในปลั๊กอิน แต่ยังไม่มีโชคใด ๆ
สิ่งที่ฉันพยายามทำโดยเฉพาะคือเพิ่มตัวเลือกในรายการของเทมเพลตหน้าที่มีอยู่เมื่อแก้ไขหน้าและไม่ใช้วิธีอื่นเช่น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) จะแสดงรายการ URL ตั๋ว trac ที่นี่เล็กน้อย
แก้ไข 3:
โค้ดด้านบนใช้งานได้ แต่ปัญหาเดียวที่ฉันมีอยู่ในตอนนี้คือไม่มีเทมเพลตที่ถูกเพิ่มลงในรายการดรอปดาวน์เมื่อแก้ไข / เพิ่มหน้าใหม่ ฉันพยายามทำบางสิ่งและจะอัปเดตคำถามของฉันในไม่ช้า
page_template
เบ็ดรหัสด้านบนในการแก้ไขของฉันคือสิ่งที่กำลังใช้อยู่ ฉันจำเป็นต้องใช้template_redirect
ตะขอแล้วเพิ่มpage_template
ตัวกรองในนั้นหรือไม่