class My_Virtual_Page {
public function __construct() {
add_action( 'init', array( $this, 'init' ) );
}
/**
* Hook to add the virtual page
*/
public function init() {
if ( get_option( 'permalink_structure' ) ) {
$param = trim( parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH ), '/' );
} else {
parse_str( parse_url( $_SERVER['REQUEST_URI'], PHP_URL_QUERY ), $params );
$param = ( isset( $params['page_id'] ) ? $params['page_id'] : false );
}
if( $param == 'my-payment-page' ) {
//Enqueue any page specific styles and scripts here
add_filter( 'the_posts', array( $this, 'my_virtual_payment_page' ) );
}
}
/**
* @param $posts
* The virtual page filter
*
* @return array
*/
function my_virtual_payment_page( $posts ) {
global $wp, $wp_query;
if(!$query->is_main_query()) {
return $posts;
}
//Just double checking. Can be ignored.
if ( strcasecmp( $wp->request, 'my-payment-page' ) !== 0 ) {
return $posts;
}
$content = '<p>HTML Page content here!</p>';
$post = $this->my_virtual_post_object( 'my-payment-page', __( 'Virtual payment page', 'domain' ), $content );
// set filter results
$posts = array( $post );
// reset wp_query properties to simulate a found page
$wp_query->is_page = true;
$wp_query->is_singular = true;
$wp_query->is_home = false;
$wp_query->is_archive = false;
$wp_query->is_category = false;
unset( $wp_query->query['error'] );
$wp_query->query_vars['error'] = '';
$wp_query->is_404 = false;
return ( $posts );
}
/**
* @param $slug
* @param $title
* @param $content
*
* Generate the post object dynamically
*
* @return stdClass
*/
function my_virtual_post_object( $slug, $title, $content ) {
$post = new stdClass;
$post->ID = -1;
$post->post_author = 1;
$post->post_date = current_time( 'mysql' );
$post->post_date_gmt = current_time( 'mysql', 1 );
$post->post_content = $content;
$post->post_title = $title;
$post->post_excerpt = '';
$post->post_status = 'publish';
$post->comment_status = 'closed';
$post->ping_status = 'closed';
$post->post_password = '';
$post->post_name = $slug;
$post->to_ping = '';
$post->pinged = '';
$post->modified = $post->post_date;
$post->modified_gmt = $post->post_date_gmt;
$post->post_content_filtered = '';
$post->post_parent = 0;
$post->guid = get_home_url( 1, '/' . $slug );
$post->menu_order = 0;
$post->post_type = 'page';
$post->post_mime_type = '';
$post->comment_count = 0;
return $post;
}
}
Creating Your Own WordPress Permalink Structure For Custom Content (binarymoon.co.uk)
How to create a ‚Fake‘ WordPress post on the fly | Barn2 Plugins
Create WordPress virtual page „On The Fly“ (Example) (coderwall.com)
Schreibe einen Kommentar