-
-
Save cubehouse/3839159 to your computer and use it in GitHub Desktop.
// 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"; | |
} |
Thanks! Found a bug, though - line 23 should be fakepage_ABCD_render()
to match the name of the function on line 49.
@daltonrooney just create
function fakepage_ABCD_render() {
return 'fake';
}
Not sure why yet but I'm getting Trying to get property of non-object in link-template.php on line 636
from this.
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
Great job, this works like a charm!
Is there any way to call a custom page template and use retrieved API info?
Thanks.
Amazing ! Many thanks for your job :)
I am amazed this is still relevant 11 years later. Surprised WordPress has had such a robust framework it hasn't needed much change to keep this mostly working.
This code is extremely useful! Works perfect. Thanks!