Support » Allgemeine Fragen » Mit PHP-Code arbeiten

  • Gelöst sonoptikon

    (@sonoptikon)


    Ich poste das mal bei Allgemein, weil ich sonst keine bessere Stelle finde.

    Es gibt verschiedene Gruppen, z.B. wie im Link: DFG Münster, hier ist der Link fest angegeben.

    Einige dieser Gruppen haben einen Newsletter, andere nicht.

    Ich möchte nun einen PHP-Code verwenden, der folgendes klärt:

    Gibt es eine Datei „Gruppen/Münster/newsletter,pdf“
    wenn ja: Setze einen Link auf diesen Newsletter.

    Ich arbeite mit isfile(), wenn es ergebnislos bleibt, passiert nichts, wenn ja, dann wird an dieser Stelle ein Link auf den newsletter gesetzt.

    Wie kann ich in meiner Seite an diese Stelle ein solchen kurzen PHP-Code setzen?

    • Dieses Thema wurde geändert vor 4 Jahren, 9 Monaten von sonoptikon.

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 51)
  • Thread-Starter sonoptikon

    (@sonoptikon)

    Vielen Dank! Jetzt verstehe ich endlich, was andere meinen, wenn sie sagen, „Da könntest du auch mit Shortcodes arbeiten“.

    Ich stelle im Moment eine komplett in PHP programmierte Seite auf PHP um, d.h. die Funktionen gibt es bereits, ich muss sie nur anpassen.

    Dazu habe ich allerdings eine Frage, für dir ich keine Antwort bekommen habe:

    Ich brauche eine Datei „functions.php“. Wenn ich online (in einem Fall bei IONOS) arbeite, wie kann ich diese Datei erzeugen. Ich könnte sie auch lokal erzeugen und dann hochladen.

    Wie gehe ich dbei vor, damit ich einen gute Start habe?

    • Diese Antwort wurde geändert vor 4 Jahren, 9 Monaten von sonoptikon.

    Ich stelle im Moment eine komplett in PHP programmierte Seite auf PHP um

    Ähmmmm, bitte was?

    Hallo,

    Ich brauche eine Datei „functions.php“.

    Ganz kurz: In den allermeisten Fällen macht es Sinn, sogen. childthemes zu erstellen. Diese childthemes setzen praktisch auf dem Parenttheme auf und enthalten zusätzliche Features, Änderungen, etc.
    Eine umfangreichere Darstellung findest Du z. B. hier
    Viele Grüße
    Hans-Gerd

    Thread-Starter sonoptikon

    (@sonoptikon)

    Tut mir leid, aber ich muss meine dumme Frage wiederholen:

    Zunächst einmal: Ich bin mit PHP gut vertraut: Meine noch aktuelle Webseite dfgnrw.de ist komplett in PHP programmiert. Ich arbeite lokal, kann die Webseite mit Apache2 auch lokal testen, und ich lade alle Änderungen mit sitecopy hoch.

    Nun sagt man mir, dass ich eine Datei functions.php erstellen soll, aber ich arbeite online und sehe im Dahbord von WordPress keine Möglichkeit, Dateien anzulegen. Wie also, wenn ich online bei meinem Provider arbeite, soll ich denn dann eine Datei erstellen und pflegen.

    Sagt es mir bitte – ich finde dazu nirgendwo einen Hinweis.

    Aaah – ich habe jetzt unter Design->Theme Editor den Menüpunkt Theme functions gefunden. Und da muss ich dann wohl was eintragen, oder?

    • Diese Antwort wurde geändert vor 4 Jahren, 9 Monaten von sonoptikon.

    Aaah – ich habe jetzt unter Design->Theme Editor den Menüpunkt Theme functions gefunden. Und da muss ich dann wohl was eintragen, oder?

    überhaupt nicht empfehlenswert, weil die entsprechenden Änderungen beim nächsten theme-Update weg sind.

    Sagt es mir bitte – ich finde dazu nirgendwo einen Hinweis.

    Ich verstehe nicht, warum Du Dir die Infos bei dem von mir genannten Link nicht ansiehst ?! – Daher noch mal mein Hinweis auf childthemes, Link s. o.
    Hier noch ein weiterer Link direkt auf wordpress.org

    Thread-Starter sonoptikon

    (@sonoptikon)

    Durchaus: Aber ich habe es nicht verstanden

    Ich verfüge über recht viel Erfahrung in Programmierung insgesamt, speziell auch PHP. Aber ich bin erst seit vier Wochen in WordPress unterwegs, und mir ist zunächst alles fremd.

    Der erste Punkt war natürlich: Wie lege ich überhaupt eine functions.php an?

    Dann kam das Argument: Du solltest aber ein Child Theme anlegen. Aha. Aber ie lege ich ein Child Theme an?

    Nun arbeite ich online auf dem Server, und ich denke eigentlich, gerade bei Design->Editor müsste es doche ine Funktion geben, „Child Theme anlegen“, aber ich finde so etwas nicht.

    Ich habe auf einer anderen Domain relativ anspruchslos eine WordPress-Site zusammengeklickt. Mit FileZilla kann ich diese Anwendung sehen, aber die Anwendung, an der ich jetzt arbeite, sehe ich nicht. ich kann also auch nicht mit FileZilla arbeiten. ich kann aber sehr wohl mit seitecopy Bestandteile hochladen, aber das hilft ja nicht.

    Was ich verstanden habe: Ich soll nicht im Theme arbeiten, weil das unverändert bleiben soll, sondern in einem Child Theme, das ich jederzeit wieder plattmachen kann, wenn etwas schiefläuft.

    Ich renne jeden Tag von neuem mit dem Kopf an die Wand, aber es geht auch voran …

    Als Anwender sollst du dir zur Gestaltung deiner Website ein hübsches Theme aussuchen und über Design > Customizer im Rahmen der vom Entwickler vorgegebenen Einstellungsoptionen an deine Bedürfnisse anpassen. Zusätzliche Funktionalität – z.B. ein Kontaktformular – kannst du dann über kostenfrei erhältliche Plugins ergänzen, alles ohne eine Zeile zu programmieren.

    Für Anwender, denen die Einstellungsoptionen im Customizer nicht reichen, gibt es verschiedene Wege, doch zu einer mehr an die eigenen Bedürfnisse angepassten Darstellung zu kommen:

    • „Vielzweck-Themes“ (Multipurpose-Themes) stellen dir deutlich mehr Einstellungsoptionen für alle möglichen Darstellungselemente zur Verfügung. Nachtteil ist, dass bei jedem neuen Abruf einer Website dutzende Optionen erst abgerufen und dann gerendert werden müssen, was sich negativ auf die Performance auswirkt, aber dafür eben auch mehr Gestaltungsmöglichkeiten bietet.
    • Page Builder erlauben komplexere Gestaltung, sind aber als Ergänzung zur Grundfunktionalität von WordPress häufig ebenfalls schlechter für die Performance und haben unter Umständen den negativen Effekt, dass sie nicht mit anderen Page Buildern kompatibel sind und beim Deaktivieren des Page Builder Plugins auch die Inhalte nicht mehr aufbereitet werden können. Der neue Blockeditor, der mit WordPress 5.0 eingeführt wurde, soll Abhilfe schaffen, indem er einerseits komplexere Layouts ermöglicht, andererseits als Grundfunktionalität zur Verfügung steht und damit der „Aussperr-Effekt“ wegfällt.
    • Im Customizer kannst du Zusätzliches CSS eingeben und so die Gestaltung eines Themes von kleinen Details (einer Akzentfarbe hier, einem Abstand dort) bis zu recht umfangreichen Änderungen beeinflussen. Da die CSS-Regeln über den Customizer in der Datenbank gespeichert werden, gehen sie bei Updates des Themes nicht verloren.
    • Du kannst natürlich auch dein eigenes Theme entwickeln. Allerdings ist, wenn du semantisch korrektes HTML verwenden, auf allen gängigen Browsern nutzbares CSS verwenden, die Webseiten barrierefrei gestalten möchtest, alle Vorgaben für die Entwicklung von WordPress-Themes einhalten möchtest, etc. die Entwicklung eines Themes so komplex, dass die Entwicklung vermutlich recht aufwändig (und damit teuer) wird. Meistens ist es sinnvoller, auf bereits vorhandene Themes aufzusetzen und ergänzend Templates mit abweichender Programmierung einzusetzen. Das heißt dann …
    • Child Themes. Wie Child Themes erstellt werden, wurde bereits so häufig ausführlichst beschrieben, dass du mit einer einfachen Abfrage in der Suchmaschine deiner Wahl auf Anhieb eine hübsche Anleitung finden solltest. Child Themes erhalten nur ergänzende/abweichende Templates und werden zusätzlich zur Vorgabe, dem so genannten Parent Theme (einem normalen WordPress-Theme, auf das sich das Child Theme als Vorlage bezieht) gespeichert. Durch dieses Konzept werden Änderungen bei Updates des Parent Themes nicht überschrieben. Möchtest du also z.B. eine eigene Funktion zur Gestaltung deiner Website hinzufügen, kannst du ein Child Theme anlegen und dort in dem für Funktionen vorgesehenen Template functions.php weitere Funktionen anhängen.
    • Sollte es sich hingegen um eine ergänzende Funktionalität handeln, hat die im Theme nichts verloren – die Funktionalität geht sonst verloren, wenn du die Gestaltung ändern möchtest und dazu ein andere Theme auswählst. Ergänzende Funktionalität gehört in ein eigenes Plugin. Die grundlegenden Voraussetzungen zur Erstellung eines eigenen Plugins wurden ebenfalls im Web sehr gut dokumentiert. Außerdem steht dir auch hierfür unter https://developer.wordpress.org/plugins/ ein eigenes Handbuch zur Verfügung.
    • Manchmal möchte man nur eine winzig kleine Funktion hinzufügen und das Erstellen eines Child Themes oder eigenen Plugins erscheint unverhältnismäßig. In diesem Fall empfehle ich gerne das Plugin Code Snippets, mit dem du rasch kleine „Code-Schnipsel“ (so die deutsche Übersetzung) hinzufügen und wahlweise für Front- und/oder Backend aktivieren kannst.

    So viele Möglichkeiten … Wenn du bereits Erfahrungen mit PHP hast, dich aber bisher mit der Programmierung in WordPress wenig auskennst, möchte ich dir gerne das Buch „WordPress für Entwickler – Crashkurs“ von David Remer empfehlen. David ist ein sehr erfahrener Programmierer, super netter Kerl und jemand, der knapp und doch sehr anschaulich die mitunter komplexen Programmier-Eigenheiten von WordPress erklären kann. Einen besseren und schnelleren Einstieg kenne ich nicht.

    Viel Erfolg.

    Thread-Starter sonoptikon

    (@sonoptikon)

    So, jetzt habe ich es mit viel Mühe und über diverse Tutorials geschafft, ein „sparkling Child“ anzulegen.

    Beim Anwählen von „Themes“ bekomme ich erst mal folgende Fehlermeldungen:

    Warning: Use of undefined constant ‚wp_enqueue_scripts‘ – assumed ‚‚wp_enqueue_scripts‘‘ (this will throw an Error in a future version of PHP) in /homepages/37/d119100199/htdocs/clickandbuilds/DFGNRW/wp-content/themes/sparkling-child/functions.php on line 2

    Warning: Use of undefined constant ‚my_theme_enqueue_styles‘ – assumed ‚‚my_theme_enqueue_styles‘‘ (this will throw an Error in a future version of PHP) in /homepages/37/d119100199/htdocs/clickandbuilds/DFGNRW/wp-content/themes/sparkling-child/functions.php on line 2

    Das würde ich sehr gerne beheben! Was muss ich wo eintragen?

    Dann sehe ich tatsächlich das sparkling Child, und zwar ist die obere Fläche des Themes einfach nur gerastert.

    Ich klicke auf Live Vorschau, und es sieht gut aus: Ich sehe genau das, was ich bisher gemacht habe.

    Wenn ich das, was ich bisher gelernt habe, richtig verstehe, sollte ich nun als nächstes mein Child aktivieren.

    In diesem Sinn habe ich dein letztes Posting jetzt auch besser verstanden: Beim Update meines Theme übernimmt mein Child Theme automatisch die Eigenschaften des aktuellen Theme. Das ist ganz logisch, aber ich bin dabei, mich mühsam in die ganze Thematik hineinzudenken.

    Frage: Was kann passieren? Ist es möglich, dass ich einen gravierenden Fehler gemacht habe und dann überhaupt nichts mehr funktioniert, oder ist das eine übertriebene Angst?

    Weitere Frage: Wäre es nicht sinnvoll, mein Child regelmäßig auf ein „Child-save“ zu sichern?

    Erst mal Dank für die Geduld mit meinen dummen Fragen – auf deine Anregungen – ich verstehe inzwischen auch deine vorigen Postings wesentlich besser.

    Also: Child Theme einfach aktivieren -ohne Angst?

    Frage: Was kann passieren? Ist es möglich, dass ich einen gravierenden Fehler gemacht habe und dann überhaupt nichts mehr funktioniert, oder ist das eine übertriebene Angst?

    Das ist eine durchaus begründete Sorge. Wenn du dich bereits mit PHP auskennst, weißt du auch, was ein „fatal error“ ist und wieso dann ein „White Screen of Death“ angezeigt wird (falls nicht, wird dir hier weitergeholfen). Deshalb ist der bessere Weg, in einer lokalen Entwicklungsumgebung (z.B. lokaler Webserver mit Local by Flywheel – die Registrierung kannst du auch umgehen) ein Child Theme zu entwickeln und testen und dann erst auf den produktiven Server zu übertragen. Auf diese Weise hast du dann auch automatisch deine Sicherung – am besten mit einer Versionskontrolle, üblicherweise Git. (Viele nutzen dann noch GitHub und haben so ihr Ergebnis gleich auch noch „in der Cloud“ gesichert.)

    Die Warnhinweise solltest du lesen und dir intensiv Gedanken dazu machen. Wenn nichts hilft, eine Runde um den Block laufen, dann nochmal intensiv Gedanken machen. Hier können wir dir bei Fragen zu individueller Programmierung kaum weiterhelfen – schon gar nicht, wenn wir den Code nicht kennen.

    Thread-Starter sonoptikon

    (@sonoptikon)

    Vielen Dank für deine ausführlichen Erklärungen. In der Tat würde ich erst mal mit einem Code Snippet auskommen.

    Was den White Screen anbetrifft, so könnte ich ihn dadurch erzeugen, dass ich in meinem PHP-Code einen Fatal Error hervorrufe.

    Ich könnte also behutsam in meinem Child-functions-php arbeiten, und Änderungen per Filezilla rückgängig machen, wenn möglich.

    Außerdem gehe ich davon aus, dass ich ja jederzeit auf meine Entwucklungsumgebung zugreifen und im schlimmsten Fall das parent Theme (gehe ins gefängni – gehe nicht über LOS, sund ziehe keine 2000 DM ein) wieder aktivieren kann. Dann sind natürlich alle meine Ändeurngen verloren – es sei denn, ich habe sie irgendwo (lokal) gesichert.

    … dafür dann die „Entwicklungsumgebung“ (was nach einer hochaufwendigen Installation mit zig Skripten klingt, aber einfach ein lokaler Webserver mit XAMPP/MAMP/Bitnami/Local by Flywhee/etc. sein kann).

    Thread-Starter sonoptikon

    (@sonoptikon)

    Ja, habe ich gemacht … aber jetzt bin ich online

    Jetzt kommt die nächste primitive Frage:

    Ich will etwas ganz einfaches machen:

    if isfile (newsletter)
    zeige newsletter.pdf

    Ich habe eine einfache Funktion mit Übergabeparameter $name geschrieben.

    Aber wie kann ich jetzt diesen Snippet auf einer Seite an der Stelle einbinden, wo der Schriftzug „==> Newsletter“ mit eingebautem Link erscheinen soll (falls vorhanden)?

    ich habe dazu auch wieder nichts gefunden, Shortcode???

    … und jetzt einfach mal mit dem Hund um den Block …

    • Diese Antwort wurde geändert vor 4 Jahren, 9 Monaten von sonoptikon.

    ich habe dazu auch wieder nichts gefunden, Shortcode???

    Da hättest du auch nichts finden müssen, denn die Antwort dazu hast du direkt am Anfang bekommen. 🙁

    Also … erster spontaner Einfall: Du könntest ein eigenes Feld „Newsletter“ einrichten (z.B. ganz bequem mit dem Plugin Advanced Custom Fields) und dort die URL zur pdf-Datei hinterlegen. Dann in einer Funktion ein if-Statement, ob das Feld gesetzt ist. Falls ja, Link zum Newsletter hinzufügen, anderenfalls weglassen. Die Funktion könntest du an wp-content anhängen:

    function my_added_newsletter ( $content ) {
        $newsletter = '';
        if ( is_page() ) {
            $url = get_field( 'newsletter ' );
            if ( $url ) {
              $newsletter = '<p><a href="' . esc_url( $url ) . '">Newsletter</a>';
            }
            return $content . $newsletter;
        }
    }
    add_filter( 'the_content', 'my_added_newsletter');

    (Quellen: https://developer.wordpress.org/reference/hooks/the_content/#comment-2360, https://www.advancedcustomfields.com/resources/get_field/)

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 51)
  • Das Thema „Mit PHP-Code arbeiten“ ist für neue Antworten geschlossen.