$ wp_query Problem beim Versuch, eine virtuelle Seite zu erstellen

Ich versuche, eine virtuelle Seite für mein Plugin zu erstellen, und dabei habe ich ein $ wp_query reset-Problem. Ich verwende die class https://gist.github.com/brianoz/9105004 , um die virtuelle Seite zu erstellen. Ich kann alles in Ordnung bringen, aber das Problem ist, wenn es eine andere Schleife auf der Seite gibt, ob von einem Widget-Plugin in der Sidebar das $ wp_query-Set von der virtuellen Seite zurückgegeben wird. Die virtuelle Seitenklasse hat die Seite übernommen und ich kann keine Möglichkeit finden, dies zu tun, damit andere Abfragen auf der Seite funktionieren. Vielen Dank.

Solutions Collecting From Web of "$ wp_query Problem beim Versuch, eine virtuelle Seite zu erstellen"

Ich habe das gefunden und es funktioniert. Der große Unterschied besteht darin, dass überprüft wird, ob $ post count == 0 ist und die virtuelle Seite erstellt wird, die dann allen anderen Abfragen erlaubt, normal zu funktionieren.

< ?php /* Plugin Name: Virtual Page Plugin URI: http://davejesch.com Description: Create a virtual page with content Author: Dave Jesch Author URI: http://davejesch.com Version: 1.0 */ if (!class_exists('DJVirtualPage')) { class DJVirtualPage { private $slug = NULL; private $title = NULL; private $content = NULL; private $author = NULL; private $date = NULL; private $type = NULL; public function __construct($args) { if (!isset($args['slug'])) throw new Exception('No slug given for virtual page'); $this->slug = $args['slug']; $this->title = isset($args['title']) ? $args['title'] : ''; $this->content = isset($args['content']) ? $args['content'] : ''; $this->author = isset($args['author']) ? $args['author'] : 1; $this->date = isset($args['date']) ? $args['date'] : current_time('mysql'); $this->dategmt = isset($args['date']) ? $args['date'] : current_time('mysql', 1); $this->type = isset($args['type']) ? $args['type'] : 'page'; add_filter('the_posts', array(&$this, 'virtualPage')); } // filter to create virtual page content public function virtualPage($posts) { global $wp, $wp_query; if (count($posts) == 0 && (strcasecmp($wp->request, $this->slug) == 0 || $wp->query_vars['page_id'] == $this->slug)) { //create a fake post intance $post = new stdClass; // fill properties of $post with everything a page in the database would have $post->ID = -1; // use an illegal value for page ID $post->post_author = $this->author; // post author id $post->post_date = $this->date; // date of post $post->post_date_gmt = $this->dategmt; $post->post_content = $this->content; $post->post_title = $this->title; $post->post_excerpt = ''; $post->post_status = 'publish'; $post->comment_status = 'closed'; // mark as closed for comments, since page doesn't exist $post->ping_status = 'closed'; // mark as closed for pings, since page doesn't exist $post->post_password = ''; // no password $post->post_name = $this->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('/' . $this->slug); $post->menu_order = 0; $post->post_tyle = $this->type; $post->post_mime_type = ''; $post->comment_count = 0; // 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); } } } function dj_create_virtual() { $url = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); if ($url == 'dave-virtual-page') { $args = array('slug' => 'dave-virtual-page', 'title' => 'Dave\'s Virtual Page', 'content' => "This can be generated content, or static content
Whatever you put here will appear on your virtual page."); $pg = new DJVirtualPage($args); } } add_action('init', 'dj_create_virtual');