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
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' );
function gw_add_query_vars_paypal( $query_vars ) {
$query_vars[] = 'paypal';
return $query_vars;
}
add_filter( 'query_vars', 'gw_add_query_vars_paypal' );
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' );
Code-Sprache: PHP (php)
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