• Hallo, ich habe irgendwie voll die Verständnisprobleme mit dem Parent und dem Child Theme Styles. Ich habe ein Theme, in dessen Ordner eine parentthemename/styles.css enthalten ist. Und dann ist noch in parentthemename/stylesheets/main.css eine main.css mit ergänzenden Styles, die teilweise als important ausgewiesen sind. Ich habe mir jetzt ein Child Theme angelegt und darin eine functions.php und eine styles.css angelegt.

    Jetzt ist aber mein Problem, dass in der parentthemename/stylesheets/main.css auch noch Styles drin sind, die durch meine Anpassungen in meiner parentthemename/styles.css nicht überschrieben werden können.

    Muss ich jetzt im Child Theme Ordner einen Unterordner wie im Parent childthemename/stylesheets/main.css anlegen und dort eine main.css hinterlegen, die ich dann anpasse? Das habe ich versucht, hat aber noch nicht funktioniert, weil, wie würde ich das dann in der functions.php definieren, dass auch noch das main.css vom Parent überschrieben werden sollte?

    Am liebsten wäre mir, die komplette parentthemename/stylesheets/main.css im Parent zu deaktivieren und diese einfach komplett ins Child zu schieben und vom Child laden zu lassen, geht das? Was muss ich da in der functions.php schreiben, dass genau diese parentthemename/stylesheets/main.css nicht aus dem Parent geladen wird sondern nur aus dem childthemename/stylesheets/main.css.

    Und dann möchte ich im Child noch zusätzlich der Übersicht halber ganz eigene Styles z. B. childthemename/stylesheets/nurmeineganzeigenen.css hinterlegen, wie rufe ich dieses Stylesheet dann in der functions.php auch noch auf?

    Kann man im Childtheme überhaupt Unterordner anlegen für css?

    Und dann noch eine Frage zur Definition „Zusätzliche css“ im Customizer. Ich habe gesehen, dass wenn man da was einschreibt oder ziemlich viele Zeilen css einschreibt für Anpassungen, dann erscheinen ja im Quelltext der Seite diese Definitionen als interne Styles komplett in der Seite sichtbar und schreiben sich nicht in die Stylesheet Datei, ist das schön?

    Bitte, Danke für Hilfe.

Ansicht von 12 Antworten – 1 bis 12 (von insgesamt 12)
  • Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Und dann ist noch in parentthemename/stylesheets/main.css eine main.css mit ergänzenden Styles, die teilweise als important ausgewiesen sind.

    Ganz oben in der style.css befindet sich ein Kommentar mit dem Theme-Header. Diese Informationen dürfen nicht komprimiert werden. Aus Performance-Gründen verwenden manche Themes ein zusätzliches, komprimiertes Style-Sheet. Die Verwendung von !important spricht aber eher für die Unbeholfenheit des Theme-Entwicklers und erschwert Änderungen unnötig.

    Interessant wäre jetzt, wie das Stylesheet eingebunden wurde. Korrekt wäre das in dieser Form:

    function theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . 'main.css' );
    }
    add_action( 'wp_enqueue_scripts', 'theme_styles' );

    Durch get_stylesheet_directory_uri() bräuchtest du im Child Theme nur eine eigene main.css mit abgeänderten CSS-Regeln anlegen, die dann statt des Stylesheets im Parent Theme verwendet wurde.

    Hat der Theme-Entwickler allerdings statt dessen get_template_directory_uri() verwendet, musst du das Stylesheet erst auskoppeln und anschließend dein eigenes einbinden:

    wp_remove_action( 'wp_enqueue_scripts', 'theme_styles' );
    
    function child_theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . 'main.css' );
    }
    add_action( 'wp_enqueue_scripts', 'child_theme_styles' );
    

    Und dann möchte ich im Child noch zusätzlich der Übersicht halber ganz eigene Styles z. B. childthemename/stylesheets/nurmeineganzeigenen.css hinterlegen, wie rufe ich dieses Stylesheet dann in der functions.php auch noch auf?

    function more_child_theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . 'nurmeineganzeigenen.css' );
    }
    add_action( 'wp_enqueue_scripts', 'more_child_theme_styles' );

    Kann man im Childtheme überhaupt Unterordner anlegen für css?

    function more_child_theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . '/css/nurmeineganzeigenen.css' );
    }
    add_action( 'wp_enqueue_scripts', 'more_child_theme_styles' );

    …dann erscheinen ja im Quelltext der Seite diese Definitionen als interne Styles komplett in der Seite sichtbar und schreiben sich nicht in die Stylesheet Datei, ist das schön?

    Schön vielleicht nicht, aber auf diese Weise wird sichergestellt, dass die zusätzlichen CSS-Regeln auch wirklich als letztes geladen werden, weil sie sonst möglicherweise von anderen Regeln überschrieben würden. Für Ästheten gibt es aber eine hübsche Lösung von Felix: Custom CSS Outsorcer.

    Thread-Starter riania

    (@riania)

    Interessant wäre jetzt, wie das Stylesheet eingebunden wurde. Korrekt wäre das in dieser Form:

    Also in der functions.php vom Parenttheme hat der Entwickler das so gemacht:

    function parentthemename_core_styles()
    {
    
        wp_enqueue_style("parentthemename-main", get_template_directory_uri(). "/stylesheets/main.css");
    
    }

    Und in der functions.php vom mitgelieferten leeren Childtheme hat der Entwickler das vorbereitet:

    add_action( 'wp_enqueue_scripts', 'childthemename_enqueue_styles' );
    function childthemename_enqueue_styles() {
        wp_enqueue_style( 'parent-style', get_template_directory_uri(). '/style.css' );
    
    }

    Danke für die genauen Anleitungen, ich werde das heute noch genau testen. Sind in deinen beiden erwähnten Codes unten noch Platzhalter drin, die ich noch durch Themenamen ersetzen muss? Hier ist das theme_styles oder foo-theme aus deinen Codes ein Platzhalter und muss noch auf einen Themenamen geändert werden oder nicht?

    function theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . 'main.css' );
    }
    add_action( 'wp_enqueue_scripts', 'theme_styles' );
    
    wp_remove_action( 'wp_enqueue_scripts', 'theme_styles' );
    
    function child_theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . 'main.css' );
    }
    add_action( 'wp_enqueue_scripts', 'child_theme_styles' );
    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    die Funktionen kannst du nach belieben benennen, so lange die Namen nicht mit vorhandenen Funktionsnamen übereinstimmen. Viele Entwickler setzte ihre Initialen davor oder z.B. riania_theme_styles. Auch die Bezeichnung des Stylesheets ist dir überlassen: wp_enqueue_style( 'riania', get_stylesheet_directory_uri() . 'main.css' );.

    Thread-Starter riania

    (@riania)

    Hi nochmal, also wenn ich folgendes machen will: in die childtheme/functions.php deinen Code einfügen und zwar diesen, weil der Entwickler ja in der parent/functions.php get_template_directory_uri() verwendet hat :

    wp_remove_action( 'wp_enqueue_scripts', 'theme_styles' );
    
    function child_theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . 'main.css' );
    }
    add_action( 'wp_enqueue_scripts', 'child_theme_styles' );

    Dann erhalte ich sofort, wenn ich auf den Button Datei aktualisieren klicke diese Meldung, zur Info, ich hab im Design Editor die Child/functions.php bearbeitet:

    Call to undefined function wp_remove_action() …. themes/child/functions.php:28 Stack trace: #0 …

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Oh, sorry! 😳
    Da ist mir ein Fehler unterlaufen. Die Funktion heißt einfach remove_action(), also remove_action( 'wp_enqueue_scripts', 'name_der_funktion' );

    Thread-Starter riania

    (@riania)

    Danke, kein Problem, Tippfehler kann ja mal passieren, aber das klappt alles bei mir überhaupt nicht. Der fatal Error ist zwar weg, aber nichts von meinen eigenen Stylesheets wird in irgendeiner Variante angenommen. Ich habe alles probiert glaube ich.

    Also das Original Parent Theme hat in der functions.php das hier stehen, was ich löschen und modifiziert auslagern will:

    /*——————————*********————————————
    CSS : Initialize
    -----------------------*********-----------------------*/
    function wrobell_core_styles()
    {
    
       wp_enqueue_style("wrobell-main", get_template_directory_uri(). "/stylesheets/main.css");
    
    }

    Wie sollte dann in der Child Theme functions.php der Löschenbefehl lauten? ‚theme_styles‘ stimmt doch dann da sicher nicht oder … das muss doch dann eher wie die function heissen oder …

    remove_action( 'wp_enqueue_scripts', 'theme_styles' );

    Und wie muss dann das Anlegen eines eigenen Stylesheets im Child Theme lauten, wenn da schon entwicklerseits drin steht …

    add_action( 'wp_enqueue_scripts', 'wrobellchild_enqueue_styles' );
    function wrobellchild_enqueue_styles() {
        wp_enqueue_style( 'parent-style', get_template_directory_uri(). '/style.css' );
    
    }

    Aber wenn ich bei dieser function da das ‚/style.css‘ einfach ändere in ‚/main.css‘ oder in ‚/stylesheets/main.css‘ oder noch eine Zeile ergänze, dann tut sich nix und es werden immer noch alle Styles vom Parent main.css angezeigt.

    Und auch das, um ein ganz eigenes neues Stylesheet anzulegen, wie von dir oben beschrieben, bleibt komplett wirkungslos …

    function more_child_theme_styles() {
        wp_enqueue_style( 'foo-theme', get_stylesheet_directory_uri() . 'nurmeineganzeigenen.css' );
    }
    add_action( 'wp_enqueue_scripts', 'more_child_theme_styles' );

    Der Entwickler schreibt mir, ich soll im original Parent Theme die main.css editieren, aber dann ist das ja nicht updatesicher. Aber ich verliere die Geduld langsam, dann werde ich das halt nicht chic mit dem Child machen sondern eben unchic um zum Ergebnis zu kommen mit dem Editieren des Parent.

    Danke dir auf jeden Fall tausendmal und tschuldigung, dass ich es nicht besser kann.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Wie sollte dann in der Child Theme functions.php der Löschenbefehl lauten?

    Wenn im Parent Theme folgendes steht

    function wrobell_core_styles(){ 
      wp_enqueue_style("wrobell-main", get_template_directory_uri(). "/stylesheets/main.css");
    }
    add_action( 'wp_enqueue_scripts', 'wrobell_core_styles' );

    dann musst du auch genau diese Funktion wieder entfernen:
    remove_action ( 'wp_enqueue_scripts', 'wrobell_core_styles' );

    Und wie muss dann das Anlegen eines eigenen Stylesheets im Child Theme lauten, wenn da schon entwicklerseits drin steht …

    Dann bindet du dein eigenes Stylesheet (z.B. riania-style.css) zusätzlich ein:

    add_action( 'wp_enqueue_scripts', 'wrobellchild_enqueue_styles' );
    function wrobellchild_enqueue_styles() {
      wp_enqueue_style( 'parent-style', get_template_directory_uri(). '/style.css' );
      wp_enqueu_style( 'riania-style', get_template_directory_uri(). '/riania-style.css' );
    }

    Und auch das, um ein ganz eigenes neues Stylesheet anzulegen, wie von dir oben beschrieben, bleibt komplett wirkungslos …
    Was meinst du mit „wirkungslos“? Wird das Stylesheet nicht eingebunden (siehst du dann in der Console der Browser-Entwicklertools) oder werden „nur“ die vorhandenen CSS-Regeln nicht überschrieben? Das ist mit einer Beschreibung wie „bleibt komplett wirkungslos“ schlecht zu beurteilen.

    Der Entwickler schreibt mir, ich soll im original Parent Theme die main.css editieren, aber dann ist das ja nicht updatesicher.
    Richtig. Vielleicht kennt sich der Entwickler auch nicht so richtig aus?

    Aber ich verliere die Geduld langsam, dann werde ich das halt nicht chic mit dem Child machen sondern eben unchic um zum Ergebnis zu kommen mit dem Editieren des Parent.
    Was soll ich darauf antworten? ¯\_(ツ)_/¯

    Danke dir auf jeden Fall tausendmal und tschuldigung, dass ich es nicht besser kann.

    Deine Fragen sind ohne Einblick ins Theme wie gesagt schwierig zu beurteilen. Denk auch bitte daran, dass ich keine Anleitung geben wollte, die du einfach kopierst und in dein Child Theme einfügst, sondern allgemein beschrieben habe, wie du vorgehen kannst:

    give a man a fish and you feed him for a day;
    teach a man to fish and you feed him for a lifetime

    (ich hab übrigens keine Ahnung, wie das genderneutral ausgerückt würde)

    Thread-Starter riania

    (@riania)

    Hallo nochmal, Danke, jetzt hab ich es entwirrt! Ich habe jetzt mal genau in den Quellcode der Seite geschaut und dann den Fehler entdeckt.

    
    add_action( 'wp_enqueue_scripts', 'wrobellchild_enqueue_styles' );
    function wrobellchild_enqueue_styles() {
      wp_enqueue_style( 'parent-style', get_template_directory_uri(). '/style.css' );
      wp_enqueu_style( 'riania-style', get_template_directory_uri(). '/riania-style.css' );
    }
    

    Das get_template_directory_uri() führt immer in den Parent Theme Ordner und wird so ausgegeben …

    Ausgabe in HTML der Seite:
    <link rel=’stylesheet‘ id=’parent-style-css‘ href=’http://www.site.com/wp-content/themes/wrobell/style.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />

    Wenn ich jetzt da oben wp_enqueu_style( 'riania-style', get_template_directory_uri(). '/riania-style.css' );schreibe, geht das nicht in den Child Theme Ordner sondern eben auch ins Parent Theme …

    Ausgabe in HTML der Seite:
    <link rel=’stylesheet‘ id=’riania-style-css‘ href=’http://www.site.com/wp-content/themes/wrobell/riania-style.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />

    Korrekt muss es nun statt get_template_directory_uri() richtigerweise get_stylesheet_directory_uri() lauten, dann führt alles ins Child Theme …

    
    add_action( 'wp_enqueue_scripts', 'wrobellchild_enqueue_styles' );
    function wrobellchild_enqueue_styles() {
    	wp_enqueue_style( 'parent-style', get_stylesheet_directory_uri(). '/style.css' );
    	wp_enqueue_style( 'riania-wrobell-child-styles', get_stylesheet_directory_uri(). '/stylesheets/main.css' );
    
    }
    

    Ausgabe im HTML der Seite:
    <link rel=’stylesheet‘ id=’parent-style-css‘ href=’http://www.site.com/wp-content/themes/wrobell-child/style.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />
    <link rel=’stylesheet‘ id=’riania-wrobell-child-styles-css’ href=’http://www.site.com/wp-content/themes/wrobell-child/stylesheets/main.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />

    Das remove_action ( 'wp_enqueue_scripts', 'wrobell_core_styles' ); löscht definitiv das Parent /stylesheets/main.css nicht, deshalb sagte ich „bleibt wirkungslos“, sprich, der Link zu diesem Stylesheet bleibt im Seitenquellcode der Seite verlinkt stehen. Da habe ich mir jetzt einfach so beholfen, dass ich das einfach im Parent Theme Ordner umbenannt habe, dann wirkt es nicht mehr.

    Thank you, you gave the woman fish! Jetzt kann ich den Entwickler was vormachen. Ich habe es jetzt doch chic alles im Child. Danke.

    (∩`-´)⊃━☆゚.*・。゚

    Thread-Starter riania

    (@riania)

    Hä, jetzt sagt mir das Forum „FEHLER: Doppelte Antwort entdeckt! Sieht so aus, als hättest du das bereits geschrieben.“ Poste ich das jetzt doppelt. Wollte noch einen Tippfehler bearbeiten.

    Hallo nochmal, Danke, jetzt hab ich es entwirrt! Ich habe jetzt mal genau in den Quellcode der Seite geschaut und dann den Fehler entdeckt.

    
    add_action( 'wp_enqueue_scripts', 'wrobellchild_enqueue_styles' );
    function wrobellchild_enqueue_styles() {
      wp_enqueue_style( 'parent-style', get_template_directory_uri(). '/style.css' );
      wp_enqueu_style( 'riania-style', get_template_directory_uri(). '/riania-style.css' );
    }
    

    Das get_template_directory_uri() führt immer in den Parent Theme Ordner und wird so ausgegeben …

    Ausgabe in HTML der Seite:
    <link rel=’stylesheet‘ id=’parent-style-css‘ href=’http://www.site.com/wp-content/themes/wrobell/style.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />

    Wenn ich jetzt da oben wp_enqueu_style( 'riania-style', get_template_directory_uri(). '/riania-style.css' );schreibe, geht das nicht in den Child Theme Ordner sondern eben auch ins Parent Theme …

    Ausgabe in HTML der Seite:
    <link rel=’stylesheet‘ id=’riania-style-css‘ href=’http://www.site.com/wp-content/themes/wrobell/riania-style.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />

    Korrekt muss es nun statt get_template_directory_uri() richtigerweise get_stylesheet_directory_uri() lauten, dann führt alles ins Child Theme …

    
    add_action( 'wp_enqueue_scripts', 'wrobellchild_enqueue_styles' );
    function wrobellchild_enqueue_styles() {
    	wp_enqueue_style( 'parent-style', get_stylesheet_directory_uri(). '/style.css' );
    	wp_enqueue_style( 'riania-wrobell-child-styles', get_stylesheet_directory_uri(). '/stylesheets/main.css' );
    
    }
    

    Ausgabe im HTML der Seite:
    <link rel=’stylesheet‘ id=’parent-style-css‘ href=’http://www.site.com/wp-content/themes/wrobell-child/style.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />
    <link rel=’stylesheet‘ id=’riania-wrobell-child-styles-css’ href=’http://www.site.com/wp-content/themes/wrobell-child/stylesheets/main.css?ver=4.8&#8242; type=’text/css‘ media=’all‘ />

    Das remove_action ( 'wp_enqueue_scripts', 'wrobell_core_styles' ); löscht definitiv das Parent /stylesheets/main.css nicht, deshalb sagte ich „bleibt wirkungslos“, sprich, der Link zu diesem Stylesheet bleibt im Seitenquellcode der Seite verlinkt stehen. Da habe ich mir jetzt einfach so beholfen, dass ich das einfach im Parent Theme Ordner umbenannt habe, dann wirkt es nicht mehr.

    Thank you, you gave the woman fish! Jetzt kann ich den Entwickler was vormachen. Ich habe es jetzt doch chic alles im Child. Danke.

    (∩`-´)⊃━☆゚.*・。゚

    Thread-Starter riania

    (@riania)

    Hallo, also ich hab irgendwie nur Murks mit dem Child Theme nix funktioniert und alles ist kompliziert, jetz habe ich mal eine blöde Frage. Kann ich nicht einfach das ganze Parent Theme wp-content/themes/wrobell/ einfach kopieren und wp-content/themes/wrobell-meins/ nennen und einfach in diesem Themeordner alle meine Anpassungen machen? Dann bleibt mein original Theme unberührt aber ich habe wie ein komplettes eigenes Parent Theme als Kopie ohne diese komische Child Theme Vorgehensweise, das muss doch gehen oder?

    Danke nochmal.

    Moderator Bego Mario Garde

    (@pixolin)

    Moderator (nicht mehr aktiv)

    Das geht … nur gibt’s dann keine Updates. Wenn dem Entwickler also irgendwann mal auffallen sollte, dass sein Theme eine Sicherheitslücke hat und er die ja mal beheben könnte, bekommst du davon nichts mit.

    (Allerdings hatte ich bisher den Eindruck, dass der Theme-Entwickler … räusper … ohnehin nicht viel mitbekommt.)

    WordPress ist OpenSource und gemäß GPL sind übrigens auch Themes, die WordPress-Funktionen benutzen damit automatisch OpenSource. Es spricht also auch rechtlich nichts dagegen, dass du das Theme an deine eigenen Bedürfnisse anpasst.

    Mach Backups, und vergewissere dich, dass du zur Not das Theme per FTP-Client löschen kannst, falls ein Programmierfehler in einem White Screen of Death endet.

    Thread-Starter riania

    (@riania)

    Hi, na super, dann mach ich das doch genau so, weil so bin ich nämlich straight forward zu meinen gewünschten Ergebnissen gekommen und mit dem Child Zeug hab ich Stunde um Stunde vergeudet.

    nur gibt’s dann keine Updates. Wenn dem Entwickler also irgendwann mal auffallen sollte, dass sein Theme eine Sicherheitslücke

    Damit kann ich leben. Ich bin in der Mailinglist zu den Updates.

    (Allerdings hatte ich bisher den Eindruck, dass der Theme-Entwickler … räusper … ohnehin nicht viel mitbekommt.)

    Da mach ich jetzt ¯\_(ツ)_/¯, hi, hi, hi. Das Template sieht aber awesome aus und das ist genau, was ich brauche, diesen Look, es sieht nicht so … ebenfalls räusper … allerwelts WordPress aus, wenn du weißt, was ich meine. Ich kann leider selbst noch nicht genug, um meine statisch selbst gemachten Templates auf WP zu programmieren …

    WordPress ist OpenSource und gemäß GPL sind übrigens auch Themes, die WordPress-Funktionen benutzen damit automatisch OpenSource

    Der Entwickler hat ja auch selbst gesagt, ich soll das im Parent Theme machen. Das tu ich dann und bin glücklich damit. Ich verkauf das Theme ja dann nicht, es ist ja nur für mein Projekt.

    Mach Backups, und vergewissere dich, dass du zur Not das Theme per FTP-Client

    Danke tausendmal für deine Deine Mühe, das habe ich alles gesichert und auch per FTP Zugriff.

    Tausenddank.

Ansicht von 12 Antworten – 1 bis 12 (von insgesamt 12)

Das Thema „Parent main.css ins Child verschieben und nur das laden lassen ? …“ ist für neue Antworten geschlossen.