Manchmal ist es hilfreich auf URLs dynamisch antworten zu können. Eine statische Seite anzulegen fühlt sich aber nicht stimmig an, oder geht einfach nicht.
Für solche Fälle braucht es „virtuelle“ Seiten. Also Seiten im WordPress, die dadurch entstehen, dass sie aufgerufen werden.
Solche virtuelle Seiten verwende ich z. B. um auf die Return-URLs des PayPal-Buttons zu antworten.
Hier ein bisschen Code
<?php /** * Handles PayPal return pages */ /* adds rewrite rules so paypal urls are easy and nice */ function gw_add_rewrite_rules_paypal_return_pages() { add_rewrite_rule( 'paypalsuccess/(\d+)/?$', 'index.php?paypal=success&paypal_content_id=$matches[1]', 'top' ); add_rewrite_rule( 'paypalcancel/(\d+)/?$', 'index.php?paypal=cancel&paypal_content_id=$matches[1]', 'top' ); } add_action( 'init', 'gw_add_rewrite_rules_paypal_return_pages' ); /* makes new query variable accessible - needed later */ function gw_add_query_vars_paypal( $query_vars ) { $query_vars[] = 'paypal'; return $query_vars; } add_filter( 'query_vars', 'gw_add_query_vars_paypal' ); /* make rewrite tag accessible - so can be used in template */ function gw_add_rewrite_tag_paypal() { add_rewrite_tag( '%paypal_content_id%', '([^&]+)' ); } add_action( 'init', 'gw_add_rewrite_tag_paypal', 10, 0 ); function gw_redirect_paypal_return_pages() { $paypal_result = get_query_var( 'paypal' ); $post_id = get_query_var( 'paypal_content_id' ); if ( 'success' === $paypal_result ) { global $current_user; include get_stylesheet_directory() . '/paypal-success.php'; exit(); } elseif ( 'cancel' === $paypal_result ) { include get_stylesheet_directory() . '/paypal-cancel.php'; exit(); } else { return; } }; add_action( 'template_redirect', 'gw_redirect_paypal_return_pages' );
gw_add_rewrite_rules_paypal_return_pages legt neue Rewrite-Regeln an, damit kann die angegebenen URL aufgerufen werden und wird von WordPress verarbeitet
gw_add_query_vars_paypal macht den Parameter „paypal“ für WordPress bekannt um dann in gw_redirect_paypal_return_pages verwendet zu werden.
In gw_redirect_paypal_return_pages wird WordPress angewiesen statt das vorgesehene Template zu laden eine Seite aufzurufen und danach abzubrechen.
gw_add_rewrite_tag_paypal macht glaube ich tatsächlich nichts mehr. Eigentlich sollte die Funktion „paypal_content_id“ im Theme verfügbar machen, darauf kann ich aber garnicht zugreifen, weil meine PHP-Dateien nicht im WordPress-Loop sind.
Schreibe einen Kommentar