Bir eklenti içinde özel bir sayfa şablonu oluşturmanın bir yolu için son birkaç saattir baktım ama henüz şansım olmadı.
Bir sayfayı düzenlerken, ve ne ben özellikle yapmaya çalışıyorum mevcut sayfa şablonları listesine bir seçenek ekleyin değil başka bir yöntemi gibi kullanarakif( is_page( 'page-slug' ) ) { /* etc */ }
Bunu yapmak için değiştirebileceğim global bir değişken var mı?
Düzenle:
Şu anda bu kodu kullanıyorum, @ m0r7if3r bir yorumda bana verilen bağlantıya dayanarak, sorun sayfayı görüntülerken bu işlevi çalıştıracak, ancak sayfayı düzenlerken değil (açılan listeyi sayfa şablonlarıyla doldurmak için) :
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;
}
}
Düzenleme 2:
Bu işlevin gelecekteki bir güncellemede yayınlanacağı anlaşılıyor, bu konuda birkaç trac bileti okudum ve bazı tartışmalar yapıldı, ancak gerçek bir cevap yok (3.4 umuyor). Trac bilet URL'lerini burada biraz listeleyecek.
Düzenleme 3:
Yukarıdaki kod çalışıyor, AMA, bu noktada yaşadığım tek sorun, yeni bir sayfa düzenlerken / eklerken açılır listeye eklenecek şablon yok. Birkaç şey deniyorum ve yakında sorumu güncelleyeceğim.
page_template
düzenlememde yukarıdaki kod şu anda kullanılan şey. template_redirect
Kancayı kullanmam ve ardından page_template
filtreyi buraya eklemem gerekir mi?