ACF-Preisfeld in WordPress in eine andere Währung umrechnen
Um ein ACF-Preisfeld in WordPress in eine andere Währung umzurechnen, lassen Sie WPCS das Feld selbst lesen: [wpcs_price meta_value=property_price] nimmt das benutzerdefinierte Feld property_price des aktuellen Beitrags und zeigt es in der Währung, die der Besucher gewählt hat. Funktioniert das nicht, ist die Ausgabe entweder leer oder 0.00, und die Ursache ist fast immer der Meta-Schlüssel oder das Format des gespeicherten Werts. Im Folgenden: die Einrichtung, wie Sie den echten Schlüssel finden, was jede falsche Ausgabe bedeutet und was bei Repeatern, Optionsseiten und Page Buildern zu tun ist.
Setzen Sie meta_value auf [wpcs_price], nicht auf [wpcs]
WPCS hat zwei getrennte Shortcodes. [wpcs] zeichnet den Währungsumschalter; [wpcs_price] gibt einen Preis aus. meta_value ist ein Attribut des Preis-Shortcodes: [wpcs meta_value=property_price] zeigt einen Umschalter und sonst nichts, das Feld ändert sich also nie. Verwenden Sie beide, jeden an seinem Platz:
<?php
// header.php of a child theme: the switcher
echo do_shortcode('[wpcs show_flags=1 txt_type="desc"]');
?>
Und im Inhalt, wo der Preis stehen soll: [wpcs_price meta_value=property_price]. Der Shortcode liest das Feld des aktuellen Beitrags, nimmt es als Betrag in Ihrer Basiswährung und rechnet ihn mit dem aktuellen Kurs um. Für das Feld eines anderen Beitrags fügen Sie dessen ID hinzu: [wpcs_price meta_value=property_price post_id=123]. Geben Sie meta_value immer zusammen mit post_id an: Mit post_id allein sucht der Shortcode ein Feld namens wpcs_price.
Die Beträge im Feld müssen in der Basiswährung stehen, also in der, die im Tab Währungen (Currencies) ausgewählt ist (siehe So funktioniert die Basiswährung). Enthält das Feld stattdessen Ihren eigenen Betrag je Währung, etwa USD:15,EUR:20, fügen Sie type=fixed hinzu, wie unter Festpreise pro Währung beschrieben.
Den echten Meta-Schlüssel des Feldes finden
Ein ACF-Feld hat drei Bezeichner, und nur einer davon funktioniert:
- Field Label, zum Beispiel „Immobilienpreis“: der Text, den Redakteure sehen. Kein Schlüssel.
- Field Name, zum Beispiel
property_price: das ist der Meta-Schlüssel, unter dem ACF den Wert speichert. Verwenden Sie ihn inmeta_value. - Field Key, zum Beispiel
field_5fb9732bdda1e: die interne ID von ACF, gespeichert in einer zweiten, versteckten Meta-Zeile_property_price. Sie enthält keinen Preis.
Felder innerhalb anderer ACF-Felder werden unter zusammengesetzten Namen gespeichert. Ein Unterfeld amount der Gruppe pricing wird als pricing_amount gespeichert. Zeilen des Repeaters prices werden als prices_0_amount, prices_1_amount und so weiter gespeichert, ab 0 gezählt, [wpcs_price meta_value=prices_0_amount] gibt also die erste Zeile aus. Felder einer ACF-Optionsseite und von Taxonomie-Begriffen sind gar keine Beitrags-Metadaten; der Shortcode kann sie nicht lesen, und sie werden wie unten gezeigt in PHP umgerechnet.
Themes und Plugins, die Preise über eigene Hilfsfunktionen ausgeben, verbergen den Schlüssel: Der Name einer solchen Funktion oder das ihr übergebene Wort ist nicht unbedingt der Meta-Schlüssel, und eine Funktion lässt sich dem Shortcode nicht übergeben. Um zu sehen, was ein Beitrag wirklich speichert, fügen Sie kurz dieses Snippet hinzu, öffnen Sie den Beitrag als angemeldeter Administrator und lesen Sie die Liste unter dem Inhalt:
/*
* Temporary: list all custom fields of the current post under its content,
* for administrators only. Child theme functions.php or a code snippets
* plugin. Remove it when you have found the key.
*/
add_filter('the_content', function ($content) {
if (is_singular() && current_user_can('manage_options')) {
$meta = get_post_meta(get_the_ID());
$content .= '<pre>' . esc_html(print_r($meta, true)) . '</pre>';
}
return $content;
});
Ein Eintrag wie [property_price] => Array ( [0] => 250000 ) liefert Ihnen sowohl den Schlüssel als auch den gespeicherten Wert. Bei einem ACF-Feld enthält der Schlüssel ohne Unterstrich den Wert und der mit Unterstrich den Field Key. Eine Anleitung speziell für Themes finden Sie unter Preise von Theme-Listings umrechnen.
Warum der umgerechnete ACF-Preis nichts oder 0.00 zeigt
Das Plugin liest den gespeicherten Text ab dem ersten Zeichen als Zahl und hört beim ersten Zeichen auf, das nicht Teil einer einfachen Zahl ist. Das erklärt jedes seltsame Ergebnis:
| Im Feld gespeichert | In der Basiswährung angezeigt, Format 1,000.00 | Warum |
|---|---|---|
| Nichts oder falscher Schlüssel | Nichts | Der Wert ist leer; leer und 0 geben keinen Preis aus |
250000 oder 1250.50 | 250,000.00 / 1,250.50 | Korrekt |
$250,000 oder € 250 | 0.00 | Ein Symbol vor der Zahl wird als 0 gelesen |
250,000 | 250.00 | Das Lesen endet am Komma |
1.250 (Tausender mit Punkt) | 1.25 | Der Punkt wird als Dezimalpunkt gelesen |
12,50 | 12.00 | Ein Dezimalkomma beendet die Zahl |
Eine leere Ausgabe bedeutet also, dass der Schlüssel falsch oder das Feld für diesen Beitrag leer ist; 0.00 oder ein viel zu kleiner Betrag bedeutet, dass der Schlüssel stimmt und das gespeicherte Format falsch ist. Die Lösung ist ein Feld, das nur eine einfache Zahl enthalten kann: Verwenden Sie in ACF den Feldtyp Zahl (Number) für Preise und setzen Sie Symbole und Wörter wie „pro Monat“ um den Shortcode herum, nicht ins Feld. Formatierung, Symbol und Trennzeichen kommen dann aus den Einstellungen der Währung in WPCS.
Für Beiträge, bei denen der Preis absichtlich leer ist, legt der Filter wpcs_price_free_text den Text fest, den [wpcs_price] statt nichts ausgibt. Er gilt für jeden leeren oder auf null stehenden Preis der Website:
/*
* WPCS: text shown by [wpcs_price] when the amount is empty or 0.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('wpcs_price_free_text', function ($text) {
return 'Price on request';
});
Templates, Repeater und Optionsseiten: in PHP umrechnen
In einem Theme-Template innerhalb der Loop führen Sie denselben Shortcode aus: echo do_shortcode('[wpcs_price meta_value=property_price]');. Bei Werten, die Sie mit ACF-Funktionen lesen, übergeben Sie die Zahl als value. Das funktioniert für jede Repeater-Zeile:
<?php
// Child theme template: price list from the ACF repeater "prices"
// with the sub fields "label" and "amount" (amounts in the base currency).
if (have_rows('prices')) {
echo '<ul>';
while (have_rows('prices')) {
the_row();
$amount = (float) get_sub_field('amount');
echo '<li>' . esc_html(get_sub_field('label')) . ': '
. do_shortcode('[wpcs_price value=' . $amount . ']') . '</li>';
}
echo '</ul>';
}
// A field of an ACF options page:
$fee = (float) get_field('booking_fee', 'option');
echo do_shortcode('[wpcs_price value=' . $fee . ']');
// A field of a taxonomy term ($term_id is the ID of the term):
$from = (float) get_field('from_price', 'term_' . $term_id);
echo do_shortcode('[wpcs_price value=' . $from . ']');
?>
Enthält ein altes Textfeld bereits Werte wie 250,000, bereinigen Sie sie vor der Umrechnung: (float) str_replace(array(',', ' '), '', $raw) macht aus 250,000 die Zahl 250000. Bevorzugen Sie für die Anzeige den Shortcode gegenüber $WPCS->wpcs_exchange_value(): Der Shortcode ergänzt das Währungssymbol, und nur seine Ausgabe wird für jeden Besucher neu gezeichnet, wenn Ich verwende ein Cache-Plugin auf meiner Website (I am using cache plugin on my site) aktiviert ist.
Page Builder und dynamische Felder
Ein dynamisches Tag, das in einem Page Builder ein ACF-Feld anzeigt, gibt den Wert so aus, wie er gespeichert ist; er läuft nicht durch WPCS. Setzen Sie an diese Stelle stattdessen das Shortcode-Element des Builders, mit [wpcs_price meta_value=property_price] darin. In Templates für einzelne Beiträge und für Loop-Elemente ist der aktuelle Beitrag der gerade angezeigte, sodass jede Karte ihren eigenen Preis zeigt.
Zwei Dinge funktionieren nicht: ein Shortcode, der in ein ACF-Textfeld getippt wird (das Feld gibt seinen Text unverändert zurück, sofern das Template ihn nicht durch do_shortcode() laufen lässt), und [wpcs_price] in einer Zelle oder einem Attribut des Shortcodes oder der Tabelle eines anderen Plugins, das keine Shortcodes verarbeitet. In beiden Fällen erscheint der Code als Text. Verlegen Sie den Preis an eine Stelle, die Shortcodes ausführt, oder geben Sie ihn in PHP aus.
Checkliste
meta_valuesteht an[wpcs_price], mit dem ACF-Field Name (oder dem zusammengesetzten Namen bei Gruppen- und Repeater-Feldern).- Das Feld speichert eine einfache Zahl in der Basiswährung:
250000oder1250.50. - Außerhalb der eigenen Seite des Beitrags ist
post_idzusammen mitmeta_valuegesetzt. - Felder von Optionsseiten und Begriffen werden mit
get_field()gelesen und mitdo_shortcode()umgerechnet. - Das temporäre Snippet zur Meta-Auflistung ist entfernt.
Zeigt das Feld weiterhin nichts, eröffnen Sie ein Thema im WPCS-Support-Forum mit dem Shortcode, dem Meta-Schlüssel und dem Wert aus der Meta-Auflistung.