Wie entferne ich eine übergeordnete Themenseitenvorlage von einem untergeordneten Thema?

Ich verwende das TwentyTen-Thema, um ein untergeordnetes Thema zu erstellen, aber ich kann nicht die Seitenvorlage “Eine Spalte, keine Seitenleiste”, die sich im übergeordneten Thema TwentyTen befindet, loswerden.

Ich dachte, es einfach kopieren und Löschen der Inhalte würde den Trick tun, aber es scheint nicht. Weiß jemand, wie man das macht? Ich bin mir sicher, dass es sehr einfach ist.

Vielen Dank

osu

Solutions Collecting From Web of "Wie entferne ich eine übergeordnete Themenseitenvorlage von einem untergeordneten Thema?"

Das Überschreiben dieser Vorlage wäre viel einfacher, als sie loszuwerden. Genau wie die Logik geht.

Ich behaupte nicht, dass es eine effiziente Idee ist (spät hier), aber dies würde es vom Editierbildschirm aus vernichten:

add_action('admin_head-post.php','remove_template'); function remove_template() { global $wp_themes; get_themes(); $templates = &$wp_themes['Twenty Ten']['Template Files']; $template = trailingslashit( TEMPLATEPATH ).'onecolumn-page.php'; $key = array_search($template, $templates); unset( $templates[$key] ); } 

WordPress 3.9 führt einen theme_page_templates Filter ein.

Das folgende Beispiel aus einem Twenty-Fourteen- Child-Theme functions.php zeigt, wie die Vorlage “Contributor Page” entfernt wird:

 function tfc_remove_page_templates( $templates ) { unset( $templates['page-templates/contributors.php'] ); return $templates; } add_filter( 'theme_page_templates', 'tfc_remove_page_templates' ); 

Erweitern Sie die Antwort von @Rarst, hier ist ein generischerer Ansatz, der nicht an ein bestimmtes Thema gebunden ist, sondern innerhalb der functions.php Ihres eigenen Unterthemas verwendet werden kann, um alle übergeordneten Themenseitentemplates, die Sie loswerden wollen, aufzulösen.

 function remove_template( $files_to_delete = array() ){ global $wp_themes; // As convenience, allow a single value to be used as a scalar without wrapping it in a useless array() if ( is_scalar( $files_to_delete ) ) $files_to_delete = array( $files_to_delete ); // remove TLA if it was provided $files_to_delete = preg_replace( "/\.[^.]+$/", '', $files_to_delete ); // Populate the global $wp_themes array get_themes(); $current_theme_name = get_current_theme(); // Note that we're taking a reference to $wp_themes so we can modify it in-place $template_files = &$wp_themes[$current_theme_name]['Template Files']; foreach ( $template_files as $file_path ){ foreach( $files_to_delete as $file_name ){ if ( preg_match( '/\/'.$file_name.'\.[^.]+$/', $file_path ) ){ $key = array_search( $file_path, $template_files ); if ( $key ) unset ( $template_files[$key] ); } } } } 

Sie können es also in der functions.php-Datei Ihres Child-Themes wie folgt verwenden:

 add_action( 'admin_head-post.php', 'remove_parent_templates' ); function remove_parent_templates() { remove_template( array( "showcase.php", "sidebar-page" ) ); } 

Hier erläutere ich nur, dass Sie den “.php” -Teil nicht weitergeben müssen, wenn Sie nicht möchten.

Oder: remove_template( "sidebar-page" ); – Sie müssen kein Array übergeben, wenn Sie nur eine einzige Datei ändern möchten.

Es gibt einen neuen Filter im WP-core (3.9), um Seitenvorlagen zu entfernen. Es kann von untergeordneten Themen verwendet werden.

Um dies in TwentyTen zu erreichen (getestet auf WP 3.9):

 add_filter( 'theme_page_templates', 'my_remove_page_template' ); function my_remove_page_template( $pages_templates ) { unset( $pages_templates['onecolumn-page.php'] ); return $pages_templates; } 

https://core.trac.wordpress.org/changeset/27297

http://boiteaweb.fr/theme_page_templates-hook-semaine-16-8033.html

Da die vorherigen Antworten in den aktuellen Versionen von WordPress nicht mehr funktionieren und es eine Frage gab, die ich gerade (April 2013) mit einem PHP-Ausgabepuffer beantwortet hatte, dachte ich, dass ich einen Link zu dieser Antwort schreiben würde.

Außerdem wurde gerade das Template Theme Page Templates auslassen, das beim Hinzufügen oder Bearbeiten einer WordPress- Seite alle übergeordneten Themenseitentemplates aus der Dropdown-Liste der Templates in der Metabox Seitenattribute ausfiltert .

10. Juli 2012 – WordPress 3.4.1

Vorherige Antworten funktionieren nicht und wie Rarst in einem Kommentar sagte:

themenbezogene Interna haben in 3.4 umfangreiche Refactoring- und API-Änderungen durchlaufen, so dass viele ältere Sachen nicht funktionieren

Schnelle und schmutzige jQuery-Lösung

 add_action('admin_head', 'wpse_13671_script_enqueuer'); function wpse_13671_script_enqueuer() { global $current_screen; /** * /wp-admin/edit.php?post_type=page */ if('edit-page' == $current_screen->id) { ?>  < ?php } /** * /wp-admin/post.php?post=21&action=edit */ if( 'page' == $current_screen->id ) { ?>  < ?php } } 

Kein Haken dafür?

Wenn ich den richtigen Pfad /wp-includes/class-wp-theme.php , passiert hier die "Aktion" ( /wp-includes/class-wp-theme.php ), und es sieht so aus, als gäbe es hier nichts, was /wp-includes/class-wp-theme.php ...

 /** * Returns the theme's page templates. * * @since 3.4.0 * @access public * * @return array Array of page templates, keyed by filename, with the value of the translated header name. */ public function get_page_templates() { // If you screw up your current theme and we invalidate your parent, most things still work. Let it slide. if ( $this->errors() && $this->errors()->get_error_codes() !== array( 'theme_parent_invalid' ) ) return array(); $page_templates = $this->cache_get( 'page_templates' ); if ( ! is_array( $page_templates ) ) { $page_templates = array(); $files = (array) $this->get_files( 'php', 1 ); foreach ( $files as $file => $full_path ) { $headers = get_file_data( $full_path, array( 'Template Name' => 'Template Name' ) ); if ( empty( $headers['Template Name'] ) ) continue; $page_templates[ $file ] = $headers['Template Name']; } $this->cache_add( 'page_templates', $page_templates ); } if ( $this->load_textdomain() ) { foreach ( $page_templates as &$page_template ) { $page_template = $this->translate_header( 'Template Name', $page_template ); } } if ( $this->parent() ) $page_templates += $this->parent()->get_page_templates(); return $page_templates; }