Support » Themes » Eigene PHP Datein in Childtheme einbinden

  • Hallo,

    Ich habe folgendes Problem:

    Ich nutze ein Theme mit dem ich grundlegend vom Aussehen her komplett einverstanden bin.
    Ich habe allerdings eigene PHP Datein mit inhalten, die im Adminbereich unter Seiten mit hilfe von „[include filepath=’/DATEINAME.php‘]“ eingebunden werden.

    Nun liegt die besagte Datei im Eltern Ordner, nach einem Update, ist diese weg…
    Also habe ich ein Child Theme erstellt, aktiviert und die besagte .php datei dorthin verschoben…

    Das Problem:
    Beim aufruf der Seite, wird der inhalt nicht angezeigt. Verschiebe ich die Datei wieder in das original theme verzeichnis, geht alles ohne probleme…

    Wie kann ich das lösen?

Ansicht von 9 Antworten - 1 bis 9 (von insgesamt 9)
  • Thread-Ersteller paineone

    (@paineone)

    Die funktion include habe ich per php-snippet festgelegt und sieht wie folgt aus:

    function include_file($atts) { 
    	extract(shortcode_atts(array('filepath' => 'NULL'), $atts));
    	if ($filepath!='NULL' && file_exists(TEMPLATEPATH.$filepath)){ 
    	ob_start();
    	include(TEMPLATEPATH.$filepath);
    	$content = ob_get_clean();
    	return $content;
    	}
    }
    add_shortcode('include', 'include_file');
    

    Du kannst folgendes verwenden, um eine php-Datei in einem Theme einzubinden:

    <?php include( get_stylesheet_directory() . '/includes/myfile.php'); ?>

    Bei deinem Shortcode hätte ich aber Sicherheitsbedenken, weil über den Shortcode beliebiger PHP-Code ausgeführt werden könnte.

    Thread-Ersteller paineone

    (@paineone)

    Wenn ich Deinen Code auf der Seite einfüge, wird leider nichts geladen…

    Soweit ich weiss kann man auf Seiten nur html code nutzen, kein php.
    Weiss nicht wie ich das sonst einbinden soll.

    In meinen PHP datein ist nur reiner Content drin, keine Theme settings o.ä…
    Habe spezielle Formulare die in eigenen PHPs drin stehen.

    • Diese Antwort wurde geändert vor 2 Jahre, 10 Monaten von paineone.
    Thread-Ersteller paineone

    (@paineone)

    Wo muss ich denn deinen Code eintragen damit ich diesen ‚wie‘ auf einer Seite einfügen kann?

    Mit Seite meine ich in Adminbereich die Seiten die man erstellen kann.

    Ich hoffe wir reden nicht aneinander vorbei.
    Ich möchte nichts im Theme hinzufügen.
    Es geht um eine Seite bzw Inhalt, der auf der Homepage von mir per klick auf einen Menüpunkt aufgerufen wird.

    Klickt man bei mir zb auf der Navigation auf „Rechner“, dann wird die Seite aufgerufen, die ich im Admin bereich unter ‚Seiten‘ hinzugefügt habe mit Info text und da drunter soll dann meine PHP included sein… Quasi passend zur seite.

    hoffe das war verständlicher 🙂

    • Diese Antwort wurde geändert vor 2 Jahre, 10 Monaten von paineone.
    • Diese Antwort wurde geändert vor 2 Jahre, 10 Monaten von paineone.
    Thread-Ersteller paineone

    (@paineone)

    Ich habe eine Lösung gefunden.

    Ich habe eine eigene Template php im Child Ordner erstellt.
    Darin dann folgendes:

    <?php
    /*
    Template Name: NAME-Template
    */
    ?>
    <?php get_header(); ?>
    	<div id="primary">
    		<div id="content" class="clearfix">
    			<?php if ( have_posts() ) : ?>
    				<?php while ( have_posts() ) : the_post(); ?>
    					<h2><?php the_title(); ?></h2>
    					<?php the_content(); ?>				
    				<?php endwhile; ?>
    			<?php endif; ?>
    MEIN HTML&PHP CODE
    
                    </div><!-- #content -->
    	</div><!-- #primary --> 
    <?php get_footer(); ?>

    So kann ich auf einer erstellten „Seite“ im Backend (Adminbereich) meinen Info text als erstes schreiben und dann rechts das dazugehörige Template auswählen.

    Den Snippet hab ich aus sicherheitsgründen deaktiviert, Danke für die info.
    Falls du eine bessere Lösung hast bin ich offen dafür 😉

    Wenn du Code postest, gehe ich davon aus, dass du weißt, dass dieser Code nicht im Seiten-Editor eingefügt wird.

    Wenn du „fremden“ PHP-Code in deinem Child-Theme verwenden möchtest, kannst du zuerst einmal überlegen, ob der Code immer wieder an der gleichen Stelle auftauchen oder nach Belieben in Seiten eingefügt werden soll.

    Um den Code z.B. bei der Darstellung einzelner, statischer Seiten immer unterhalb des Inhalts auszugeben, fügst du im Template page.php einen Funktionsaufruf unterhalb der Loop ein – so, wie du es zuletzt getan hast. Die Funktion selber sollte dann in der functions.php des Child Themes stehen. (Die Funktion in das Template einzufügen, wie du es in deinem zuletzt geposteten Code mit MEIN HTML&PHP CODE andeutest, ist keine gute Idee, weil das unübersichtlich und damit schwer zu warten/pflegen ist.)

    Wenn der Code aber an beliebigen Stellen im Inhalt vorkommen soll, kannst du einen Shortcode verwenden. Dabei wird die externe PHP-Funktion in die Shortcode-Funktion eingebettet – entweder direkt oder auch per Include, wobei du get_stylesheet_directory() nutzen kannst, um das aktuelle Verzeichnis des Child Themes zu ermitteln. (Hinweis: Funktionen in Shortcodes dürfen immer nur einen Wert per return zurückgeben, weil sie anschließend zusammen mit dem Seiteninhalt ausgegeben werden.)

    Achte bei der Ausgabe externer Funktionen auch immer auf die Sicherheit: Der ausgegebene Wert muss escaped werden, die Eingabe (z.B. Werte in einem Rechner) sanitized – sonst hast du schnell einen JavaScript- oder SQL-Injection.

    Ich hoffe, es ist nun verständlicher.

    Thread-Ersteller paineone

    (@paineone)

    Ich verstehe es nur halb, hab von WP nicht viel Ahnung.

    Das mit der Page.php und Funktion verstehe ich nicht. Ich nutze keine Funktion in meinem PHP Script.

    Eine Seite (Php) von mir beinhaltet lediglich 3 Felder drop-down wo man Werte auswählt, dann auf berechnen klickt und einem das Ergebnis ausgespuckt wird. (Ohne DB)

    Das geschieht via Form get-post.
    Kann es nicht eleganter lösen weil ich nicht die Kenntnisse habe.

    Dieser Rechner wird auch nur auf einer Seite Gebraucht und nicht auf mehreren.

    Weiss nicht wie ich das sonst machen soll, bin aber offen für Vorschläge, falls du die Geduld hast mir alles zu erklären 😁

    Lg

    Nehmen wir mal an, du erstellst eine Seite und nennst sie „Berechnung“. Die Titelform heißt ebenfalls berechnung. Wenn du nun in einem Child Theme ein Template page-berechnung.php erstellst, wird – abweichend zu allen anderen statischen Seiten – für diese Seite dieses neue Template verwendet.

    Nehmen wir nun an, du verwendest ein wenig PHP, um ein Formular mit einem Drop-Down-Feld anzuzeigen, das die Werte 1 bis 24 enthält:

    <select name="fourLight">
        <?php for ($i = 0; $i <= 24; $i++) : ?>
            <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
        <?php endfor; ?>
    </select>

    (Quelle: stack overflow)

    Nun kannst du entweder diesen Code in das Template einfügen, wobei er dann nur vor, nach oder statt dem eigentlichen Seiteninhalt erscheinen kann.
    Um das Template „sauberer“ zu halten, kannst du den Code auch in eine Funktion packen:

    function fourlight_dropdown() {
      $out = '<select name="fourLight">';
      for ($i = 0; $i <= 24; $i++) {
        $out .= '<option value="' . $i . '">' . $i . '</option>';
      };
      $out .= '</select>';
      return $out;
    }

    und diese Funktion kannst du dann in deinem Template verwenden:

    <?php echo fourlight_dropdown(); ?>

    Natürlich kannst du auch stattdessen ganze Dateien per include einbinden, wobei dir die WordPress-Funktion get_stylesheet_directory() den Pfad zu deinem Child Theme liefert:
    <?php include( get_stylesheet_directory() . '/includes/myfile.php'); ?>

    Möchtest du den Code allerdings nicht vor, nach oder statt des Seiteninhalts ausgeben, sondern im Seiteninhalt, solltest du einen Shortcode verwenden. Auch in diesem Shortcode kannst du wieder die Funktion get_stylesheet_directory() nutzen.

    Ich hoffe, es ist diesmal etwas klarer geworden. Um „alles zu erklären“, also „das Leben, das Universum und den ganzen Rest“ (42!) fehlt mir ein wenig die Zeit. 🙂

    Thread-Ersteller paineone

    (@paineone)

    Ok danke. Ich muss mich damit etwas mehr befassen wie ich alles in Funktionen umschreiben oder so. Bislang hab ich generell zu wenig Ahnung von PHP und WP … Vor 15 Jahren als ich anfing, war alles noch einfacher für mich, bin da etwas raus geraten 😁 danke und um die 42! Kümmere ich mich wenn ich mein WP auswendig programmieren kann 😂💪

Ansicht von 9 Antworten - 1 bis 9 (von insgesamt 9)
  • Das Thema „Eigene PHP Datein in Childtheme einbinden“ ist für neue Antworten geschlossen.