Immobilienpreise in WordPress in eine andere Währung umrechnen
Um Immobilienpreise in WordPress in eine andere Währung umzurechnen, muss der Preis durch den Währungsumschalter laufen. Ein Theme für Immobilien, Kleinanzeigen, Vermietung oder Buchungen gibt seine Preise mit eigenem Code aus. Wählt ein Besucher im WPCS-Umschalter eine andere Währung, bleiben diese Preise daher unverändert. WPCS rechnet nur um, was sein eigener Shortcode [wpcs_price] und seine PHP-Funktionen ausgeben. Die Lösung besteht darin, dass das Theme seinen Preis über sie ausgibt. Meist bedeutet das, eine Template-Datei oder Funktion in einem Child-Theme zu ändern, und die Schritte sind für Immobilien-, Miet-, Reise- und Kleinanzeigen-Listings dieselben.
Warum Theme- und Listing-Preise die Währung nicht wechseln
Der Umschalter durchsucht die Seite nicht nach Zahlen. Er speichert die Währung des Besuchers, und jeder mit [wpcs_price] ausgegebene Preis wird in dieser Währung berechnet: der Betrag in Ihrer Basiswährung multipliziert mit dem Kurs, formatiert und mit dem Währungssymbol angezeigt. Ein Theme, das property_price aus den Beitrags-Metadaten liest und $250,000 mit eigener Formatierung ausgibt, fragt WPCS nie, seine Preise können sich also nicht ändern.
Zwei Dinge müssen stimmen, bevor Sie beginnen:
- Die Beträge, die das Theme speichert, müssen in der WPCS-Basiswährung stehen, also in der, deren Radiobutton im Tab Währungen (Currencies) ausgewählt ist und deren Kurs 1 ist. Werden Listings in Euro erfasst, machen Sie EUR zur Basiswährung.
- Der gespeicherte Wert muss eine einfache Zahl wie
250000oder1250.50sein. Text wie250,000,$250koder Preis auf Anfrage wird als falsche Zahl oder gar nicht gelesen. Textpreise brauchen daher die unten gezeigte gesonderte Behandlung, und formatierte Zahlen müssen zuerst bereinigt werden.
Finden, wo das Theme den Preis ausgibt
Öffnen Sie ein Listing und sehen Sie sich das Preis-HTML im Inspektor des Browsers an: Seine CSS-Klasse (zum Beispiel item-price oder listing-price) ist ein guter Suchbegriff. Durchsuchen Sie dann den Theme-Ordner nach dieser Klasse und nach get_post_meta-Aufrufen in der Nähe. Sie finden eines von drei Dingen:
- Eine Template-Datei (eine Karte, eine einzelne Listing-Seite), die das Meta-Feld liest und ausgibt;
- eine Theme-Funktion wie
theme_listing_price(), die das Preis-HTML aufbaut und von mehreren Templates aufgerufen wird; - einen Theme-Shortcode oder ein Widget, das den Preis ausgibt.
Dieselbe Suche verrät auch den Meta-Schlüssel, der den Betrag enthält, das zweite Argument von get_post_meta(). Ist das Theme komplex, kann sein Autor Template, Funktion und Meta-Schlüssel in einer Antwort nennen. Nehmen Sie jede Änderung in einem Child-Theme vor, denn ein Theme-Update ersetzt die Dateien des übergeordneten Themes.
Den Preis mit [wpcs_price] ausgeben
Innerhalb der Loop oder auf einer einzelnen Listing-Seite kann der Shortcode das Meta-Feld selbst lesen; meta_value ist der Meta-Schlüssel, und der aktuelle Beitrag wird verwendet:
<?php echo do_shortcode('[wpcs_price meta_value="property_price"]'); ?>
Außerhalb der Loop (Seitenleiste, Karten-Popup, Block mit ähnlichen Listings) fügen Sie post_id hinzu: [wpcs_price post_id="123" meta_value="property_price"]. Hält der Theme-Code den Betrag bereits in einer Variable, übergeben Sie ihn als value und lassen Textpreise als Text:
<?php
// Child theme copy of the template that prints the listing price.
// "property_price" is an example: use the meta key your theme uses.
$amount = get_post_meta(get_the_ID(), 'property_price', true);
if (is_numeric($amount)) {
echo do_shortcode('[wpcs_price value="' . (float) $amount . '"]');
} else {
echo esc_html($amount); // "Price on request" and other text
}
?>
Entfernen Sie das eigene Währungssymbol des Themes um die alte Ausgabe: [wpcs_price] gibt das Symbol der gewählten Währung selbst aus, sonst erscheinen zwei Symbole. Präfixe und Postfixe wie Ab oder / Monat bleiben, wie sie sind; rechnen Sie jede Zahl einzeln um, wenn ein Listing einen Verkaufs- und einen Mietpreis hat.
Template-Dateien
Dateien, die das Theme mit get_template_part() oder locate_template() lädt, lassen sich überschreiben: Kopieren Sie die Datei an denselben Pfad im Child-Theme und bearbeiten Sie die Kopie. WordPress lädt zuerst die Version des Child-Themes.
Theme-Funktionen
Viele Themes deklarieren ihre Template-Funktionen innerhalb von if ( ! function_exists( 'theme_listing_price' ) ). Die functions.php des Child-Themes wird vor der des übergeordneten Themes geladen, sodass eine dort definierte Funktion gleichen Namens die Version des Themes überall ersetzt, wo sie verwendet wird. Kopieren Sie die ursprüngliche Funktion, behalten Sie bei, was sie zurückgibt oder ausgibt, und ändern Sie nur den Betrag:
/*
* Child theme functions.php. Works only when the parent theme wraps
* theme_listing_price() in if ( ! function_exists() ). The function
* and meta key names are examples: use the ones from your theme.
*/
function theme_listing_price() {
$amount = get_post_meta(get_the_ID(), 'property_price', true);
if (!is_numeric($amount)) {
return esc_html($amount);
}
return do_shortcode('[wpcs_price value="' . (float) $amount . '"]');
}
Houzez baut Listing-Preise zum Beispiel in houzez_listing_price() auf, auf diese Weise deklariert. Prüfen Sie die Version Ihres Themes, bevor Sie eine Funktion kopieren, denn ihre Interna ändern sich zwischen den Versionen.
Theme-Shortcodes
Stammt der Preis aus einem Theme-Shortcode, registrieren Sie einen neuen Handler für dasselbe Tag, nachdem das Theme seinen eigenen registriert hat:
/*
* Child theme functions.php: replace the theme shortcode [listing_price]
* with a version that prints the price through WPCS.
* "listing_price" and "property_price" are examples.
*/
add_action('init', function () {
remove_shortcode('listing_price');
add_shortcode('listing_price', function ($atts) {
$atts = shortcode_atts(array('id' => get_the_ID()), $atts);
$amount = get_post_meta((int) $atts['id'], 'property_price', true);
if (!is_numeric($amount)) {
return esc_html($amount);
}
return do_shortcode('[wpcs_price value="' . (float) $amount . '"]');
});
}, 99);
Bietet das Theme einen Filter für seine Preisausgabe, ist das die sauberste Stelle überhaupt: Geben Sie die Ausgabe von [wpcs_price] aus Ihrer Filter-Callback-Funktion zurück, und im Theme muss nichts kopiert werden.
Listing-, Buchungs- und Page-Builder-Plugins
Stammen die Listings aus einem Plugin (Verzeichnis-, Miet- oder Buchungs-Plugin) oder aus einem Widget eines Page Builders, gibt der Code dieses Plugins den Preis aus, und es gilt dieselbe Regel: Seine Ausgabe muss durch [wpcs_price] laufen. Suchen Sie in dieser Reihenfolge nach einem der folgenden Punkte:
- ein Filter-Hook für das Preis-HTML oder den formatierten Betrag;
- ein System zum Überschreiben von Templates (viele Plugins laden ihre Templates zuerst aus einem Ordner im aktiven Theme);
- ein Karten-Template, das Sie selbst gestalten. In einem Loop-Item-Template von Elementor Pro setzen Sie zum Beispiel dort, wo der Preis stehen soll, ein Shortcode-Widget mit
[wpcs_price meta_value="your_price_key"]ein; der Shortcode liest das Meta-Feld jedes Listings in der Loop.
Gibt es keinen davon, fragen Sie den Plugin-Autor nach einem Hook oder dem Template-Pfad. Ein Preis in einem Widget, das dafür weder Hook noch Template noch Einstellung bietet, lässt sich von außen nicht umrechnen.
Berechnete Summen: in PHP umrechnen
Summen, die Ihr Code berechnet, etwa Nächte multipliziert mit dem Preis pro Nacht, eine Anzahlung oder eine Gebühr, sollten in der Basiswährung berechnet und erst bei der Ausgabe einmal umgerechnet werden:
<?php
// Calculate in the base currency, convert only for display.
$per_night = (float) get_post_meta(get_the_ID(), 'price_per_night', true);
$total = $nights * $per_night; // $nights comes from your booking form
// Full price HTML with the currency symbol (also redrawn on cached pages):
echo do_shortcode('[wpcs_price value="' . $total . '"]');
// Or only the converted number, formatted for the selected currency:
global $WPCS;
if (isset($WPCS)) {
echo esc_html($WPCS->wpcs_exchange_value($total));
}
?>
$WPCS->wpcs_exchange_value() gibt einen formatierten String mit den Trennzeichen der gewählten Währung zurück, rechnen Sie also nicht mit seinem Ergebnis weiter. Geben Sie den Währungscode bei Bedarf mit $WPCS->current_currency daneben aus. Bevorzugen Sie auf einer Website mit Seiten-Cache den Shortcode: Ist Ich verwende ein Cache-Plugin auf meiner Website (I am using cache plugin on my site) aktiviert, wird nur die Ausgabe von [wpcs_price] für jeden Besucher neu gezeichnet (siehe Währungsumschalter und Cache-Plugins).
Das Ergebnis prüfen und die Grenzen kennen
- Wechseln Sie die Währung auf einer Listing-Karte und auf einer einzelnen Listing-Seite: Betrag, Symbol und Format sollten sich auf beiden ändern.
- Listing-Preise in einer Währung, die die Kursdienste nicht abdecken, brauchen einen von Hand eingetragenen Kurs; siehe Fehler bei Wechselkursen.
- Such-Filter und Sortierung nach Preis im Theme funktionieren weiter mit den gespeicherten Beträgen in der Basiswährung; sie rechnen nicht um.
- WPCS ändert, wie Preise angezeigt werden. Zahlungen, Buchungs-Checkouts, Rechnungen und E-Mails bleiben in der Währung, die das Theme oder das Buchungs-Plugin verwendet. Für einen WooCommerce-Shop schaltet das Schwester-Plugin FOX auch die Währung von Warenkorb und Kasse um; siehe WPCS oder FOX.
Gibt das Theme seine Preise auf eine Weise aus, die keine dieser Methoden erreicht, eröffnen Sie ein Thema im WPCS-Support-Forum mit dem Namen des Themes, dem Template oder der Funktion, die den Preis ausgibt, und dem Meta-Schlüssel, den sie liest.