/**
  * Conditionally add a hook on posts_results if this is the main query, a preview, and singular.
  *
  * @since 4.4.0
  *
  * @param WP_Query $query
  *
  * @return WP_Query
  */
 public function maybe_display_post($query)
 {
     if ($query->is_main_query() && $query->is_preview() && $query->is_singular()) {
         add_filter('posts_results', array($this, 'set_post_to_publish'), 10, 2);
     }
     return $query;
 }
示例#2
0
 /**
  * In case the store is set as front page, fool WordPress into thinking
  * this is a wpsc-product post type archive before the database is queried
  * for posts.
  *
  * Action hook: 'pre_get_post'
  *
  * @since  0.1
  * @access private
  *
  * @param  WP_Query $q query object
  */
 public function _action_prepare_front_page($q)
 {
     if (!$q->is_main_query()) {
         return;
     }
     if ($q->is_singular() && 'wpsc-product' == $q->get('post_type')) {
         add_filter('posts_where', array($this, '_prepare_single_product'), 10, 2);
     }
     if ($this->is_store_front_page()) {
         $q->set('post_type', 'wpsc-product');
         $q->wpsc_is_store_front_page = true;
         $q->is_post_type_archive = true;
         $q->is_archive = true;
     }
 }
示例#3
0
/**
 * Close comments on old posts on the fly, without any extra DB queries. Hooked to the_posts.
 *
 * @access private
 * @since 2.7.0
 *
 * @param WP_Post  $posts Post data object.
 * @param WP_Query $query Query object.
 * @return array
 */
function _close_comments_for_old_posts($posts, $query)
{
    if (empty($posts) || !$query->is_singular() || !get_option('close_comments_for_old_posts')) {
        return $posts;
    }
    /**
     * Filter the list of post types to automatically close comments for.
     *
     * @since 3.2.0
     *
     * @param array $post_types An array of registered post types. Default array with 'post'.
     */
    $post_types = apply_filters('close_comments_for_post_types', array('post'));
    if (!in_array($posts[0]->post_type, $post_types)) {
        return $posts;
    }
    $days_old = (int) get_option('close_comments_days_old');
    if (!$days_old) {
        return $posts;
    }
    if (time() - strtotime($posts[0]->post_date_gmt) > $days_old * DAY_IN_SECONDS) {
        $posts[0]->comment_status = 'closed';
        $posts[0]->ping_status = 'closed';
    }
    return $posts;
}
 /**
  * Hide archiveless posts on non-singular pages.
  *
  * @param  string $where MySQL WHERE clause.
  * @param  WP_Query $query Current WP_Query object.
  * @return string WHERE clause, potentially with 'archiveless' post status
  *                      removed.
  */
 public function posts_where($where, $query)
 {
     global $wpdb;
     if ($query->is_main_query() && !$query->is_singular() && false !== strpos($where, " OR {$wpdb->posts}.post_status = '{$this->status}'")) {
         $where = str_replace(" OR {$wpdb->posts}.post_status = '{$this->status}'", '', $where);
     }
     return $where;
 }
 public static function ids_from_url($url)
 {
     global $wp;
     $wp = new WP();
     //We need to cheat telling WP we are not in admin area to parse the URL properly
     $current_uri = $_SERVER['REQUEST_URI'];
     $self = $_SERVER['PHP_SELF'];
     $get = $_GET;
     global $current_screen;
     if ($current_screen) {
         $stored_current_screen = $current_screen->id;
     } else {
         require_once ABSPATH . '/wp-admin/includes/screen.php';
         $current_screen = WP_Screen::get('front');
     }
     $_SERVER['REQUEST_URI'] = $url;
     $_SERVER['PHP_SELF'] = 'foo';
     $urlParts = explode('?', $url);
     if (count($urlParts) > 1) {
         parse_str($urlParts[1], $_GET);
     }
     $wp->parse_request();
     $query = new WP_Query($wp->query_vars);
     $query->parse_query();
     //Set the global post in case that no-one is set and we have a single query
     global $post;
     if (!$post && $query->have_posts() && $query->is_singular()) {
         $post = $query->next_post();
         setup_postdata($post);
     }
     //Make the query accessible to add it to the response
     global $upfront_ajax_query;
     $upfront_ajax_query = clone $query;
     // Intercept /edit/(post|page)/id
     $editor = Upfront_ContentEditor_VirtualPage::serve();
     if ($editor->parse_page()) {
         global $wp_query;
         $query = $wp_query;
         $post = $wp_query->next_post();
         setup_postdata($post);
     }
     $_SERVER['REQUEST_URI'] = $current_uri;
     $_SERVER['PHP_SELF'] = $self;
     $_GET = $get;
     if (isset($stored_current_screen)) {
         //$current_screen = $current_screen::get($stored_current_screen);
         $current_screen = call_user_func(array($current_screen, 'get', $stored_current_screen));
     }
     $cascade = self::get_entity_ids(self::get_entity_cascade($query));
     return $cascade;
 }