Ich habe mich in den letzten Stunden nach einer Möglichkeit umgesehen, eine benutzerdefinierte Seitenvorlage aus einem Plugin heraus zu erstellen, hatte aber noch kein Glück.
Ich versuche speziell, der Liste der verfügbaren Seitenvorlagen beim Bearbeiten einer Seite eine Option hinzuzufügen und keine andere Methode wie die zu verwendenif( is_page( 'page-slug' ) ) { /* etc */ }
Gibt es eine globale Variable, die ich dazu ändern kann?
Bearbeiten:
Ich verwende diesen Code derzeit basierend auf dem Link @ m0r7if3r, der mir in einem Kommentar gegeben wurde. Das Problem ist, dass diese Funktion beim Anzeigen der Seite ausgeführt wird, jedoch nicht beim Bearbeiten der Seite (um die Dropdown-Liste mit den Seitenvorlagen zu füllen). ::
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;
}
}
Bearbeiten 2:
Es scheint, dass diese Funktionalität in einem zukünftigen Update veröffentlicht wird. Ich habe einige Trac-Tickets darüber gelesen und es gab einige Diskussionen, aber keine wirkliche Antwort (in der Hoffnung auf 3.4). Listet hier in Kürze Trac-Ticket-URLs auf.
Edit 3:
Der obige Code funktioniert, ABER das einzige Problem, das ich derzeit habe, ist, dass beim Bearbeiten / Hinzufügen einer neuen Seite keine Vorlage zur Dropdown-Liste hinzugefügt wird. Ich versuche ein paar Dinge und werde meine Frage bald aktualisieren.
page_template
Hook. Der obige Code in meiner Bearbeitung wird derzeit verwendet. Muss ich den template_redirect
Haken verwenden und dann den page_template
Filter dort hinzufügen ?