Super Child Themes

Immer Child Themes brauchen!

Nur gute Child Themes können von alles schutzen

CSS - style.css

Widgets

Plugins

Hooks:
Actions,
Filters

// WP Core wp-settings.php
do_action( 'after_setup_theme' );

// Twenty Fifteen functions.php
if ( ! function_exists( 'twentyfifteen_setup' ) ) {
/**
 * Sets up theme defaults and registers support for various WordPress features.
 */
function twentyfifteen_setup() {
	add_theme_support( 'post-thumbnails' );
	set_post_thumbnail_size( 825, 510, true );

	register_nav_menus( array(
		'primary' => __( 'Primary Menu', 'twentyfifteen' ),
	) );
}
}
add_action( 'after_setup_theme', 'twentyfifteen_setup' );

Parent: actions

// Twenty Fifteen Child functions.php

/**
 * Adds theme support for post formats.
 */
function twentyfifteen_child_setup() {
	add_theme_support( 'post-formats', array(
		'aside',
                'quote',
	) );
}
add_action( 'after_setup_theme', 'twentyfifteen_child_setup' );

Child: actions

Ladungs Reihenfolge

 

/twentyfifteen-child/functions.php

/twentyfifteen/functions.php

// Twenty Fifteen functions.php
if ( ! function_exists( 'twentyfifteen_setup' ) ) {
    ...
}

// Twenty Fifteen Child functions.php
/**
 * Sets up theme defaults and registers support for various WordPress features.
 * Overwrites the parent theme function
 * 
 */
function twentyfifteen_setup() {
	add_theme_support( 'post-thumbnails' );
	set_post_thumbnail_size( 825, 510, true );

	register_nav_menus( array(
		'primary' => __( 'Primary Menu', 'twentyfifteen' ),
	) );

}
add_action( 'after_setup_theme', 'twentyfifteen_setup' );

Child: pluggable actions

// WP Core wp-includes/formatting.php 
apply_filters( 'excerpt_more', ' ' . '[…]' );

// Twenty Fifteen inc/template-tags.php 
/**
 * Replaces "[...]" (appended to automatically generated excerpts) with ... and a 'Continue reading' link.
 *
 * @since Twenty Fifteen 1.0
 *
 * @return string 'Continue reading' link prepended with an ellipsis.
 */
function twentyfifteen_excerpt_more( $more ) {
	$link = sprintf( '<a href="%1$s" class="more-link">%2$s</a>',
		esc_url( get_permalink( get_the_ID() ) ),
		/* translators: %s: Name of current post */
		sprintf( __( 'Continue reading %s', 'twentyfifteen' ), '<span class="screen-reader-text">' . get_the_title( get_the_ID() ) . '</span>' )
		);
	return ' … ' . $link;
}
add_filter( 'excerpt_more', 'twentyfifteen_excerpt_more' );

Parent: filters

// return "..."
function twentyfifteen_child_excerpt_more( $more ) {
	return $more;
}
add_filter( 'excerpt_more', 'twentyfifteen_child_excerpt_more' );

// return "... Continue reading Hello World"
function twentyfifteen_excerpt_more( $more ) {
	$link = sprintf( '<a href="%1$s" class="more-link">%2$s</a>',
		esc_url( get_permalink( get_the_ID() ) ),
		/* translators: %s: Name of current post */
		sprintf( __( 'Continue reading %s', 'twentyfifteen' ), '<span class="screen-reader-text">' . get_the_title( get_the_ID() ) . '</span>' )
		);
	return ' … ' . $link;
}
add_filter( 'excerpt_more', 'twentyfifteen_excerpt_more' );

Child: filters

// Child Theme
function twentyfifteen_excerpt_more() {
}
add_filter( 'excerpt_more', 'twentyfifteen_excerpt_more' );

// Parent Theme
if ( ! function_exists( 'twentyfifteen_excerpt_more' ) && ! is_admin() ) :
/**
 * Replaces "[...]" (appended to automatically generated excerpts) with ... and a 'Continue reading' link.
 *
 * @since Twenty Fifteen 1.0
 *
 * @return string 'Continue reading' link prepended with an ellipsis.
 */
function twentyfifteen_excerpt_more( $more ) {
	$link = sprintf( '<a href="%1$s" class="more-link">%2$s</a>',
		esc_url( get_permalink( get_the_ID() ) ),
		/* translators: %s: Name of current post */
		sprintf( __( 'Continue reading %s', 'twentyfifteen' ), '<span class="screen-reader-text">' . get_the_title( get_the_ID() ) . '</span>' )
		);
	return ' … ' . $link;
}
add_filter( 'excerpt_more', 'twentyfifteen_excerpt_more' );
endif;

Child: Pluggable filters

action/filter entfernen

// Parent Theme
add_action( 'after_setup_theme', 'twentyfifteen_setup' );
// Child Theme
remove_action( 'after_setup_theme', 'twentyfifteen_setup', 11 );

// Parent Theme
add_filter( 'excerpt_more', 'twentyfifteen_excerpt_more' );
// Child Theme
remove_filter( 'excerpt_more', 'twentyfifteen_excerpt_more', 11 );

Prioritäten

// Child Theme
remove_action( 'after_setup_theme', 'twentyfifteen_setup', 11 );
remove_filter( 'excerpt_more', 'twentyfifteen_excerpt_more', 11 );

function twentyfifteen_child_remove_scripts(){
    wp_dequeue_style( 'twentyfifteen-ie7' );
}
add_action( 'wp_enqueue_scripts', 'twentyfifteen_child_remove_scripts', 11 );

function twentyfifteen_child_setup() {
    ...
}
add_action( 'after_setup_theme', 'twentyfifteen_child_setup', 11 );

function twentyfifteen_child_excerpt_more( $more ) {
    ...
}
add_filter( 'excerpt_more', 'twentyfifteen_child_excerpt_more', 11 );

THA: Theme Hooks Alliance

<?php tha_entry_before(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
	<?php tha_entry_top(); ?>
	<header class="entry-header">
		<?php the_title( '<h1 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h1>' ); ?>
	</header><!-- .entry-header -->

	<div class="entry-content">
	<?php
		/* translators: %s: Name of current post */
		the_content( sprintf(
			__( 'Continue reading %s <span class="meta-nav">→</span>', '_s' ),
			the_title( '<span class="screen-reader-text">"', '"</span>', false )
		) );
	?>
	</div><!-- .entry-content -->

	<footer class="entry-footer">
		<?php _s_entry_footer(); ?>
	</footer><!-- .entry-footer -->

	<?php tha_entry_bottom(); ?>
</article><!-- #post-## -->
<?php tha_entry_after(); ?>

Seiten Templates

<?php
/**
 * Template Name: Full Width Page
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 * @since Twenty Fourteen 1.0
 */

http://example.com/blog/category/bern/

  • category-ben.php
  • category-4.php
  • category.php
  • archive.php
  • index.php

Beispiel

/*
 * Include the Page template for the content.
 * If you want to override this in a child theme, then include a file
 * called content-page.php and that will be used instead.
 */
get_template_part( 'content', 'page' );

/*
 * Include the Post-Format-specific template for the content.
 * If you want to override this in a child theme, then include a file
 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
 */
get_template_part( 'content', get_post_format() );

Theme spezifische Hirarchie

Referenzen

Super Child Themes

By Ulrich Pogson

Super Child Themes

  • 2,141