Mit PHP-Code arbeiten
-
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 5 Jahren, 2 Monaten von sonoptikon.
Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]
-
Aber warum mein schöner string-Parameter als Array übergeben wird, erschießt sich mir nicht.
Nennt man sowas nicht die „Normative Kraft des Faktischen“?
Oder umgangssprachlich ausgedrückt: Is‘ einfach so.(Dabei hat @bscu so eine schöne Erklärung geliefert: Die Parameter werden in einem Array zusammengefasst, damit mehrere Parameter übergeben werden können.)
Vielleicht auch noch interressant in dem Zusammenhang: https://developer.wordpress.org/plugins/shortcodes/shortcodes-with-parameters/
Wobei du bei meiner Lösung mit Custom Fields längst fertig gewesen wärst. 😛
Ganz einfach:
ich habe Hunderte, wenn nicht Tausende von PHP-Zeilen programmiert, und wenn ich eine Funktion mit String aufrufe:hallo („Hallo Welt!“);
kommt sie in der Funktion eben als String an:
function hallo ($gruss) {
echo $gruss;
}Erklär mir, warum das bei code snippet nicht so ist. ich habe auch im Netz nichts dazu gefunden. Und wie kann ich das lösen
Ich habe hier einen anderen shortcode, und der übergibt auch Parameter:
[tribe_events view=“list“ category=“MS“]
Meines Wissens übergibt der keine Arrays
[tribe_events]
ist der Shortcode undview="list"
sowiecategory="MS"
sind Parameter, die dem assoziativen Array als$atts = array( 'view' => 'list', 'category' => 'MS', );
zugewiesen werden. Mit
echo $atts['view']
gibst du dannlist
aus.Es ist halt wie bei Hase und Igel:
Zuerst sagt man mir, ich soll ein Child Theme herstellen und in der functions.php meine kleinen Funktionen eintragen. Dann mache ich das, aber dann stellt sich heraus, dass es ein Plugin gibt, dass das viel einfacher lösen kann, nämlich Code Snippets.
So,. dann gucke ich mir Code Snippets an, schreibe eine Funktion, irgendwie gelingt es mir auch, eine Funktion über einen Shortcode anzusprechen, und jetzt kommst du mit custom fields um die Ecke.
Also werde ich jetzt custom fields installieren und mir das angucken.
Naja, schon wieder drei neue Sachen kennengelernt. Lernen durch Misserfolg 🙂
Was soll ich da nehmen?
https://dev1.dfgnrw.de/wp-admin/plugin-install.php?s=custom+fields&tab=search&type=term
Du … pfff … ¯\_(ツ)_/¯
WordPress ist sehr flexibel und bietet dir viele Möglichkeiten, zum Ziel zu kommen.
- Funktionen eines Themes gehören in ein Template
functions.php
. - Änderungen im Theme werden beim nächsten Update überschrieben. Besser ist es, ein Child Theme aufzusetzen (mit WP-CLI eine Sache von wenigen Sekunden).
- Manche Funktionen gehören nicht in ein Theme, sondern in ein Plugin, weil sie gar nichts mit Gestaltung zu tun haben, sondern Funktionalität ergänzen sollen.
- Manchmal ist ein Child Theme oder ein Plugin zu viel des Guten und es reicht, Code Snippets zu verwenden. Das heißt aber nicht, dass es falsch ist ein Child Theme oder Plugin zu erstellen. Das erhöht höchstens den Wartungsaufwand (was nicht unterschätzt werden sollte), aber falsch ist es nicht.
- Ob du einen Shortcode erstellst, den du händisch in jede Seite einfügen musst (dafür aber flexibel irgendwo im Text platzieren kannst) oder ob du ein Custom Field verwendest und per Template oder mit einer Funktion ausgibst, hängt vom gewünschten Ergebnis ab, das wir auf Grund der knappen Schilderung nur erahnen können.
- Tipps zu lesen, umzusetzen und dann selbst den Nutzen zu beurteilen ist eine gute Strategie, um hier etwas mitzunehmen. Wir schulden dir keine Eregbnisse, sondern sind einfach nette Menschen, die dir Tipps geben wollen.
Was soll ich da nehmen?
https://dev1.dfgnrw.de/wp-admin/plugin-install.php?s=custom+fields&tab=search&type=term
Netter Scherz. Überleg mal warum …
Das beliebte Plugin (wenn du das meinst) heisst Advanced Custom Fields. Eigene Felder (oder im Englischen eben Custom Fields) sind ein Bedienelement von WordPress … das solltest du eigentlich kennen, bevor du anfängst irgendwas zu programmieren.
Eigene Felder:
Damit du nicht (versehentlich) durch unterschiedliche Schreibweise (z.B. sind „Newsletter“/“newsletter“/“Nesletter“ drei verschiedene Feldnamen) unterschiedliche Felder erzeugst, ist es sinnvoll, eigene Felder vorher zu definieren. Du legst also fest „ich will bei Seiten immer ein Feld ‚Newsletter‘ haben“. – das macht das Plugin Advanced Custom Fields.
ich habe Hunderte, wenn nicht Tausende von PHP-Zeilen programmiert
Wenn das so ist, verstehe ich dein Problem einfach nicht. Du benutzt die API von WordPress und die macht aus den Parametern eben ein Array! Du rufst die Funktion ja auch nicht wie eine Funktion in PHP auf, sondern mit dem ShortCode. Und dann greift die API von WordPress. Wieso ist das so schwierig? Frameworks haben nun mal ihre eigene Notation, an die man sich halten muss. Das sollte man, wenn man schon viel programmiert hat, eigentlich wissen.
Wieso ist das so schwierig?
Schon mal die Redewendung „Den Wald vor lauter Bäumen nicht sehen.“ gehört? 😉
Was die vielen tausend Zeilen Code angeht, habe ich allerdings auch so meine Zweifel. 😀
naja, viele Hundert …
So, jetzt bin ich weiter.
Das Problem bestand darin, mit is_file auf einen Pfad zuzugreifen undnicht auf eine Webadresse. Den Pfad habe ich gefunden und es funktioniert.Nun ist die offene Frage: Wie kann ich den string „MS“ so an das Snippet-Plugin übergeben, dass dort auch ein string „MS“ ankommt bzw. ermittelbar ist.
Es muss doch eine Möglichkeit geben, eine PHP-Funktion aus einem Shortcode heraus mit einem Parameter zu versorgen, den die Funktion versteht.
Ich hab den Blog von Bego Mario nochmal studiert und folgendes gefunden:
function kp_sag_hallo( $atts ) {
$werte = shortcode_atts( array(
’name‘ =>; ‚Dolly‘,
), $atts);
[…]In meinem Fall wird eine Variable ‚MS‘ übergeben, also name = „MS“
Ich muss also einen Wert zuweisen, den ich aus dem Parameter-Array destilliere:
z.B. $wert = shortcode_atts( array(’name‘), $atts). Wenn ich name=“MS“ übergebe, dann wäre praktisch ’name‘ der Index des Arrays, und da stünde „MS“ drin.
Wenn ich die Funktion shortcode_atts richtig verstehe, dann extrahiere ich mit ihr aus $atts, die Array-Position [name].
Aber woher weiß er, was ’name‘ ist???
- Diese Antwort wurde geändert vor 5 Jahren, 2 Monaten von sonoptikon.
- Diese Antwort wurde geändert vor 5 Jahren, 2 Monaten von sonoptikon.
So! Jetzt habe ich folgenden Code, und man sieht, wie ich rumprobiert habe:
function zeige_newsletter ($atts) {
// $gruppe = shortcode_atts( array(’name‘), $atts);
$gruppe = $atts[name];
// $gruppe = $atts[1];// $gruppe = ‚MS‘;
$newsletter = ‚https://www.dfgnrw.de/Gruppen/‘ . $gruppe . ‚/newsletter.pdf‘;
if (is_file (‚../DFGNRW/Gruppen/MS/newsletter.pdf‘) == true) {
return ‚==> Rundschreiben / Newsletter‚;
}
// return ‚==> Rundschreiben / Newsletter – (‚ . $newsletter .‘ – gruppe = ‚ . $param .‘)‚;
}
add_shortcode(’snippet_zeige_newsletter‘, ‚zeige_newsletter‘ );Interessant ist: Ich bekomme auf der Seite eine Warnung, dass die Variable ’name‘ unbekannt ist. Seltsamerweise wird aber mein Parameter „MS“ richtig übergeben, und das Snippet „funktioniert“.
Was mache ich jetzt mit dem blöden Index ’name‘ und der dazugehörigen Warnung???
So, mit Hilfe von Bego Marios Artikel und durch intensives Nachdenken sind mir die Schuppen von den Augen gefallen, und die Logik ist klar.
Nun warten ca. 20-50Automatisations-Snippets auf mich.
An Bego Mario vielen Dank für die Geduld – die Geschichte mit den Custom Fields werde ich weiterverfolgen.
gelöst 🙂
- Funktionen eines Themes gehören in ein Template
- Das Thema „Mit PHP-Code arbeiten“ ist für neue Antworten geschlossen.