Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
WordPress Fake Page Generator - Use in Theme/Plugin to create non-existant pages dynamically
// create fake page called "chat-room"
// modify function and variable names with "ABCD" to whatever you like
// modify variable $fakepage_ABCD_url to the fake URL you require
add_filter('the_posts','fakepage_ABCD_detect',-10);
function fakepage_ABCD_detect($posts){
global $wp;
global $wp_query;
global $fakepage_ABCD_detect; // used to stop double loading
$fakepage_ABCD_url = "chat-room"; // URL of the fake page
if ( !$fakepage_ABCD_detect && (strtolower($wp->request) == $fakepage_ABCD_url || $wp->query_vars['page_id'] == $fakepage_ABCD_url) ) {
// stop interferring with other $posts arrays on this page (only works if the sidebar is rendered *after* the main page)
$fakepage_ABCD_detect = true;
// create a fake virtual page
$post = new stdClass;
$post->post_author = 1;
$post->post_name = $fakepage_ABCD_url;
$post->guid = get_bloginfo('wpurl') . '/' . $fakepage_ABCD_url;
$post->post_title = "Page Title";
$post->post_content = fakepage_chat_render();
$post->ID = -999;
$post->post_type = 'page';
$post->post_status = 'static';
$post->comment_status = 'closed';
$post->ping_status = 'open';
$post->comment_count = 0;
$post->post_date = current_time('mysql');
$post->post_date_gmt = current_time('mysql', 1);
$posts=NULL;
$posts[]=$post;
// make wpQuery believe this is a real page too
$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;
}
function fakepage_ABCD_render(){
return "My amazing pretend page :D";
}
@jupitercow

This comment has been minimized.

Copy link

commented Feb 6, 2014

This code is extremely useful! Works perfect. Thanks!

@daltonrooney

This comment has been minimized.

Copy link

commented Feb 2, 2015

Thanks! Found a bug, though - line 23 should be fakepage_ABCD_render() to match the name of the function on line 49.

@zverush

This comment has been minimized.

Copy link

commented Sep 5, 2015

@daltonrooney just create

function fakepage_ABCD_render() {
    return 'fake';
}
@nathansh

This comment has been minimized.

Copy link

commented Jan 14, 2016

Not sure why yet but I'm getting Trying to get property of non-object in link-template.php on line 636 from this.

@itdahde

This comment has been minimized.

Copy link

commented Sep 21, 2016

Hi cubehouse,

thanks for the lightest and most functioning virtualizing code snippets, i tested more than 5 and your's the best and simplest way ;)

Nathansh, i had the same problem, in my case it belongs to the
$post->ID = -999;
I changed this to
$post->ID = -1;
and the error disappears.

Then i have another error, that belongs to the gantry template framework:

Notice: Undefined offset: 1 in /var/www/vhosts/radioherzblatt.de/dev.antennefranken.de/cms/wp-content/plugins/gantry/core/gantrybodylayout.class.php on line 482
Notice: Undefined offset: 1 in /var/www/vhosts/radioherzblatt.de/dev.antennefranken.de/cms/wp-content/plugins/gantry/core/gantrybodylayout.class.php on line 483

The code at this lines looking like below:
if ($template = $this->get_query_type($type[0])) return $template; elseif ($template = $this->get_query_type($type[1])) return $template; #482 elseif ($template = $this->get_query_type("$type[0]_$type[1]")) return $template; #483 else return $this->get_query_type('attachment');

By taking a look into the query $wp_query, if saw, that it orders post_type='attachment'
SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_name = 'antenne' AND wp_posts.post_type = 'attachment' ORDER BY wp_posts.post_date DESC
but already $post->post_type='page' was set up. So i researched and found out that for the gantry template framework was necessary to set the post_type also for the query:
$wp_query->is_attachment = false;
and then i got the result without any error or notices

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.