wake-up-neo.com

überschreiben Sie die übergeordnete Themenkonfiguration in der untergeordneten Datei functions.php

Ich hoffe, jemand kann helfen, und suche nach Vorschlägen zum Überschreiben/Ersetzen einiger Funktionen, die in einem übergeordneten Thema geladen werden, und zum Verschieben in das untergeordnete Thema, damit wir Änderungen an den Dateien selbst im untergeordneten Thema vornehmen können.

Wir werden die Struktur und die Dateien in das untergeordnete Design "duplizieren", können jedoch noch keine Möglichkeit finden, die ursprünglichen übergeordneten Design-Dateien zu "entladen" und dann die zu ändernden untergeordneten Design-Dateien zu laden.

Im Wesentlichen sind es alle unten aufgeführten "Erfordernis" -Dateien, die wir duplizieren und im untergeordneten Thema ändern, aber müssen einen Weg finden, um die übergeordneten functions.php zu überschreiben.

Wir haben mehrere Möglichkeiten ausprobiert, um dies zu erreichen, können es jedoch noch nicht zum Laufen bringen.

DIESES IS DIE AKTUELLEN ELTERNFUNKTIONEN.PHP:


<?php
/**
 * moto functions and definitions
 *
 * @package moto
 */
if ( ! function_exists( 'moto_setup' ) ) :
/**
 * Sets up theme defaults and registers support for various WordPress features.
 *
 * Note that this function is hooked into the after_setup_theme hook, which
 * runs before the init hook. The init hook is too late for some features, such
 * as indicating support for post thumbnails.
 */
function moto_setup() {
    /*
     * Make theme available for translation.
     * Translations can be filed in the /languages/ directory.
     * If you're building a theme based on moto, use a find and replace
     * to change 'moto' to the name of your theme in all the template files
     */
    load_theme_textdomain( 'moto', get_template_directory() . '/languages' );
    // Add default posts and comments RSS feed links to head.
    add_theme_support( 'automatic-feed-links' );
    /*
     * Let WordPress manage the document title.
     * By adding theme support, we declare that this theme does not use a
     * hard-coded <title> tag in the document head, and expect WordPress to
     * provide it for us.
     */
    add_theme_support( 'title-tag' );
    /*
     * Enable support for Post Thumbnails on posts and pages.
     *
     * @link http://codex.wordpress.org/Function_Reference/add_theme_support#Post_Thumbnails
     */
    add_theme_support( 'post-thumbnails' );
    // This theme uses wp_nav_menu() in one location.
    register_nav_menus( array(
        'primary' => esc_html__( 'MOTO Main Menu', 'moto' ),
        'pre_header' => esc_html__( 'Preheader Menu(You have to enable Preheader from MOTO Options panel to view this menu.)', 'moto' )
    ) );
    /*
     * Switch default core markup for search form, comment form, and comments
     * to output valid HTML5.
     */
    add_theme_support( 'html5', array(
        'search-form',
        'comment-form',
        'comment-list',
        'gallery',
        'caption',
    ) );
    /*
     * Enable support for Post Formats.
     * See http://codex.wordpress.org/Post_Formats
     */
    add_theme_support( 'post-formats', array(
        'aside',
        'image',
        'video',
        'quote',
        'link',
    ) );
    // Set up the WordPress core custom background feature.
    add_theme_support( 'custom-background', apply_filters( 'moto_custom_background_args', array(
        'default-color' => 'ffffff',
        'default-image' => '',
    ) ) );
    add_theme_support( 'woocommerce' );

    global $pagenow;
    if ( is_admin() && 'themes.php' == $pagenow && isset( $_GET['activated'] ) ) {
        wp_redirect(admin_url("options-general.php?page=moto-system-status")); // Your admin page URL
        exit();
    }

}
endif; // moto_setup
add_action( 'after_setup_theme', 'moto_setup' );
/**
 * Set the content width in pixels, based on the theme's design and stylesheet.
 *
 * Priority 0 to make it available to lower priority callbacks.
 *
 * @global int $content_width
 */
function moto_content_width() {
    $GLOBALS['content_width'] = apply_filters( 'moto_content_width', 640 );
}
add_action( 'after_setup_theme', 'moto_content_width', 0 );
/**
 * Register widget area.
 *
 * @link http://codex.wordpress.org/Function_Reference/register_sidebar
 */
function moto_widgets_init() {
    register_sidebar( array(
        'name'          => esc_html__( 'Sidebar', 'moto' ),
        'id'            => 'sidebar-1',     
        'description'   => esc_html__( 'Defualt Sidebar', 'moto' ),
        'before_widget' => '<div id="%1$s" class="row no-margin widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<hr><h4>',
        'after_title'   => '</h4>',
    ) ); 
    register_sidebar( array( 
        'name'          => esc_html__( 'Shop Sidebar', 'moto' ),
        'id'            => 'shopsidebar',       
        'description'   => esc_html__( 'Shop Sidebar Show Only Shop pages', 'moto' ),
        'before_widget' => '<div id="%1$s" class="row no-margin widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<hr><h4>',
        'after_title'   => '</h4>',
    ) );
    register_sidebar( array(
        'name'          => esc_html__( 'Footer Sidebar - 1', 'moto' ),
        'id'            => 'footer-1',      
        'description'   => esc_html__( 'Footer Sidebar - 1', 'moto' ),
        'before_widget' => '<div class="col-md-3 col-sm-6 text-left">',
        'after_widget'  => '</div>',
        'before_title'  => '<hr><h4>',
        'after_title'   => '</h4>',
    ) );
    register_sidebar( array(
        'name'          => esc_html__( 'Footer Sidebar - 2', 'moto' ),
        'id'            => 'footer-2',      
        'description'   => esc_html__( 'Footer Sidebar - 2', 'moto' ),
        'before_widget' => '<div class="col-md-3 col-sm-6 text-left"><div class="mt_footer_content">',
        'after_widget'  => '</div></div>',
        'before_title'  => '<hr><h4>',
        'after_title'   => '</h4>',
    ) );
}
add_action( 'widgets_init', 'moto_widgets_init' );
/**
 * Implement the Custom Header feature.
 */
require get_template_directory() . '/function/custom-header.php';
/**
 * Custom template tags for this theme.
 */
require get_template_directory() . '/function/template-tags.php';
/**
 * Custom functions that act independently of the theme templates.
 */
require get_template_directory() . '/function/extras.php';
/**
 * Customizer additions.
 */
require get_template_directory() . '/function/customizer.php';
/**
 * Load Jetpack compatibility file. 
 */ 
require get_template_directory() . '/function/jetpack.php';

require_once get_template_directory() . '/include/aq_resizer.php';
require_once get_template_directory() . '/include/moto-sys-req.php';
require_once get_template_directory() . '/include/moto-enqueue.php';
require_once get_template_directory() . '/include/moto-functions.php';
require_once get_template_directory() . '/include/theme_plugin/plugin-activate-config.php';
require_once get_template_directory() . '/include/wordpress-reset.php';

Irgendwelche Vorschläge?

Danke im Voraus.

2
CMYK

Sie können nicht unbedingt ganze beliebige Dateien durch ein untergeordnetes Thema ersetzen.

WordPress sucht automatisch im untergeordneten Design nach Ersetzungen für die Vorlagen in der Vorlagenhierarchie sowie nach einigen zusätzlichen Dateien wie searchform.php oder comments.php, aber auch nach allen anderen Dateien, die nur vom übergeordneten Design geladen werden Kann in einem untergeordneten Thema ersetzt werden, wenn der Autor des übergeordneten Themas dies so erstellt hat. Dies schließt alle Dateien ein, die in functions.php oder in Vorlagen enthalten sind.

Damit eine Datei durch ein untergeordnetes Thema ersetzt werden kann, muss sie mit den unterstützten Funktionen geladen werden. Wenn beispielsweise ein Thema (wie das Ihre) eine Datei wie die folgende lädt:

require_once get_template_directory() . '/include/aq_resizer.php';

Dann kann ein untergeordnetes Thema nichtersetzen. Dies liegt daran, dass der '/include/aq_resizer.php'-Teil des Pfades überhaupt nicht durch WordPress geht. Es ist ein normales PHP -Element, das WordPress nicht abfangen kann. Außerdem kann get_template_directory() nur Sei immer das Verzeichnis zum übergeordneten Thema, nicht das untergeordnete Thema, wenn eines aktiv ist.

Damit eine ganze Datei in einem untergeordneten Design ersetzt werden kann, muss sie vom übergeordneten Design mit einer der folgenden Funktionen geladen werden:

require_once get_theme_file_path( '/include/aq_resizer.php' );

Da der Dateipfad als Argument an get_theme_file_path() übergeben wird, anstatt nur eine verkettete Zeichenfolge zu sein, die direkt an PHP übergeben wird, kann die Funktion zuerst im untergeordneten Design suchen, was auch der Fall ist.

Für Vorlagen können Sie, wenn das übergeordnete Thema get_template_part() verwendet, wie folgt vorgehen:

get_template_part( 'partials/content' );

Dann kann das untergeordnete Design partials/content.php erstellen, um es zu ersetzen. Wenn das übergeordnete Design jedoch include partials/content.php verwendet, kann es nicht durch ein untergeordnetes Design ersetzt werden.

get_theme_file_path() ist viel neuer (eingeführt in 4.7) als get_template_part()eingeführt in 3.0), daher viel seltener und in älteren Themen nicht vorhanden. Es ist auch nicht allgemein bekannt.

In Ihrem Code verwendet das übergeordnete Design keine dieser Methoden, daher ist es nicht möglich, die gesamte Datei zu ersetzen. Dies bedeutet, dass Sie einzelne Funktionen einzeln ersetzen müssen. Die Methode hierfür hängt davon ab, wie die Funktion verwendet wird.

Wenn das übergeordnete Thema die Funktion mit add_action() verknüpft

Wenn das übergeordnete Design die zu ersetzende Funktion mit add_action() verknüpft, können Sie die Funktion ersetzen, indem Sie eine neue Version der Funktion in Ihrem untergeordneten Design erstellen (mit einem anderen Namen) und die ursprüngliche Funktion mit remove_action() aushängen. dann binde deine neue Funktion mit add_action() ein:

remove_action( 'hook_name', 'parent_theme_function_name' );
add_action( 'hook_name', 'child_theme_function_name' );

Wenn das übergeordnete Thema die Funktion in einer Vorlagendatei verwendet

Wenn das übergeordnete Design eine Funktion hat, die Sie ersetzen möchten, und diese Funktion in einer Vorlagendatei verwendet wird, müssen Sie eine neue Version der Funktion in Ihrem untergeordneten Design erstellen (mit einem anderen Namen) und dann das _ ersetzen ( Vorlagendateiin Ihrem untergeordneten Thema, dann ersetzen Sie in der Version der Vorlage Ihres untergeordneten Themas die ursprüngliche Funktionsverwendung durch Ihre neue Funktion.

Wenn die übergeordnete Designfunktion steckbar ist

Übergeordnete Themen werden vor dem untergeordneten Thema geladen. Dies bedeutet, dass es Theme-Entwicklern möglich ist, Funktionen durch untergeordnete Themes ersetzbar zu machen, indem sie diese dann in eine function_exists()-Prüfung einschließen. Dies bedeutet, dass Sie die Funktionsdefinition durch Ihre eigene Funktion ersetzen können und dies keinen Konflikt verursacht, da das übergeordnete Design nicht versucht, sie neu zu definieren, wenn Sie dies bereits getan haben.

Ihr Code hat ein Beispiel dafür: Die Funktion moto_setup() befindet sich in dieser Prüfung:

if ( ! function_exists( 'moto_setup' ) ) :
endif;

Dies macht die Funktion moto_setup() 'pluggable', was bedeutet, dass Sie eine Funktion moto_setup() in Ihrem untergeordneten Design definieren können und das übergeordnete Design sie stattdessen verwendet.

Ob andere Funktionen in Ihrem Design auf diese Weise 'steckbar' sind oder nicht, lässt sich nicht sagen, ohne den Code zu sehen.

Fazit

  • Es ist nicht unbedingt möglich, ganze Dateien in untergeordneten Designs zu ersetzen. Außerhalb einer Handvoll von WordPress-Kernvorlagen muss das übergeordnete Thema explizit Dateien unterstützen, die austauschbar sind.
  • Wenn das Thema keine ersetzbaren Funktionsdateien enthält, gibt es verschiedene Optionen zum Ersetzen von Funktionen, je nachdem, wie das übergeordnete Thema erstellt wurde.
  • Abhängig davon, wie das übergeordnete Thema erstellt wurde, ist es durchaus möglich, dass es Teile gibt, die nicht durch ein untergeordnetes Thema ersetzt werden können, ohne dass große Teile des Themas ersetzt werden, die Sie ansonsten nicht ändern möchten. Dies kann einen Punkt erreichen, an dem Sie besser dran sind, wenn Sie nur das Thema vertiefen und ein neues erstellen.
2
Jacob Peattie

OK, nachdem sie wochenlang mit den Entwicklern von Moto Theme Pro v3 zusammengearbeitet haben, können sie das untergeordnete Thema nicht richtig zum Laufen bringen.

Das Thema entspricht nicht der "Best Practice" -Codierung, das untergeordnete Thema kann das übergeordnete Thema ohne umfangreiche zusätzliche Codierung in der Datei functions.php nicht überschreiben und ist insgesamt ein bisschen chaotisch.

Wir haben es aufgegeben.

0
CMYK

Einfach benutzen

function moto_setup() { 
  // Your new moto_setup function
}

ohne zu prüfen, ob die Funktion existiert oder nicht. Diese Funktion überschreibt die im übergeordneten Design deklarierte Funktion moto_setup().

0
Pim