/** * Filter all WordPress queries. * * optimizeMember respects the query var: `suppress_filters`. * If you need to make a query without it being Filtered, use ``$wp_query->set ("suppress_filters", true);``. * * @package optimizeMember\Queries * @since 3.5 * * @attaches-to ``add_action("pre_get_posts");`` * * @param obj $wp_query Expects ``$wp_query`` by reference, from the Filter. * @param bool $force Optional. Defaults to false. If true, we bypass all standard conditions. * However, optimizeMember will NEVER bypass `supress_filters`. * @return null * * @todo For improved reliability, modify other query vars associated with exclusions/inclusions. Like `tag_slug__in`? * See: {@link http://codex.wordpress.org/Class_Reference/WP_Query#Parameters WP_Query#Parameters} * @todo Make it possible to force filtering, even when used in combination with Query Conditionals and ``get_posts()``, which auto-supresses. * Or, perhaps strengthen the existing ``$force`` parameter in this regard. */ public static function query_level_access(&$wp_query = FALSE, $force = FALSE) { global $wpdb; /* Need this global DB object reference here. */ static $initial_query = true; /* Tracks the initial query. */ c_ws_plugin__optimizemember_querys::$current_wp_query =& $wp_query; /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__optimizemember_before_query_level_access", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ c_ws_plugin__optimizemember_querys::_query_level_access_sys($wp_query); /* Systematics. */ /**/ remove_filter("comment_feed_where", "c_ws_plugin__optimizemember_querys::_query_level_access_coms", 100, 2); remove_filter("wp_get_nav_menu_items", "c_ws_plugin__optimizemember_querys::_query_level_access_navs", 100); /**/ if (is_object($wpdb) && is_object($wp_query) && (($o = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["filter_wp_query"]) || $force)) { if (!is_admin() || c_ws_plugin__optimizemember_querys::_is_admin_ajax_search($wp_query)) { $suppressing_filters = $wp_query->get("suppress_filters"); /* Filter suppression on? */ if (!$suppressing_filters && $force || !$suppressing_filters && in_array("all", $o) && !($initial_query && $wp_query->is_singular()) || !$suppressing_filters && (in_array("all", $o) || in_array("searches", $o)) && $wp_query->is_search() || !$suppressing_filters && (in_array("all", $o) || in_array("feeds", $o)) && $wp_query->is_feed() && !$wp_query->is_comment_feed() || !$suppressing_filters && (in_array("all", $o) || in_array("comment-feeds", $o)) && $wp_query->is_feed() && $wp_query->is_comment_feed() || $suppressing_filters !== "n/a" && (in_array("all", $o) || in_array("nav-menus", $o)) && in_array("wp_get_nav_menu_items", $callers = isset($callers) ? $callers : c_ws_plugin__optimizemember_utilities::callers())) { if (!$suppressing_filters && (in_array("all", $o) || in_array("comment-feeds", $o)) && $wp_query->is_feed() && $wp_query->is_comment_feed()) { add_filter("comment_feed_where", "c_ws_plugin__optimizemember_querys::_query_level_access_coms", 100, 2); } /**/ if ($suppressing_filters !== "n/a" && (in_array("all", $o) || in_array("nav-menus", $o))) { /* Suppression irrelevant here. */ if (in_array("wp_get_nav_menu_items", $callers = isset($callers) ? $callers : c_ws_plugin__optimizemember_utilities::callers())) { add_filter("wp_get_nav_menu_items", "c_ws_plugin__optimizemember_querys::_query_level_access_navs", 100); } } /**/ if (is_user_logged_in() && is_object($user = wp_get_current_user()) && !empty($user->ID) && ($user_id = $user->ID) || !($user = false)) { if (!$user && ($_lwp = (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["login_welcome_page"])) { $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), array($_lwp)))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), array($_lwp)))); } /**/ if (!$user && ($_dep = (int) $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["file_download_limit_exceeded_page"])) { $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), array($_dep)))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), array($_dep)))); } /**/ if (is_array($_ccaps = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_ccaps($user)) && !empty($_ccaps)) { $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_ccaps))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_ccaps))); } /**/ if (is_array($_drips = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_dripped_content($user)) && !empty($_drips)) { $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_drips))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_drips))); } /**/ if (is_array($_sps = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_sp()) && !empty($_sps)) { $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_sps))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_sps))); } unset($_lwp, $_dep, $_ccaps, $_sps, $_drips); /**/ for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) { $wp_query->set("category__in", array()); /* Include no other Categories. */ $wp_query->set("category__not_in", $_catgs = c_ws_plugin__optimizemember_utils_gets::get_all_category_ids()); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_catgs)))); $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars))); break; /* All Categories will be locked down. */ } else { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) { foreach ($_catgs = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_catgs"]) as $_catg) { $_catgs = array_merge($_catgs, c_ws_plugin__optimizemember_utils_gets::get_all_child_category_ids($_catg)); } /**/ $wp_query->set("category__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("category__in")), $_catgs))); $wp_query->set("category__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("category__not_in")), $_catgs))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_catgs)))); $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars))); } } } unset($_catgs, $_catg, $_singulars); /**/ for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) { $wp_query->set("tag__in", array()); /* Include no other Tags. */ $wp_query->set("tag__not_in", $_tags = c_ws_plugin__optimizemember_utils_gets::get_all_tag_ids()); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_tags)))); $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars))); break; /* ALL Tags will be locked down. */ } else { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) { $_tags = c_ws_plugin__optimizemember_utils_gets::get_tags_converted_to_ids($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_ptags"]); /**/ $wp_query->set("tag__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("tag__in")), $_tags))); $wp_query->set("tag__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("tag__not_in")), $_tags))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_singulars = c_ws_plugin__optimizemember_utils_gets::get_singular_ids_in_terms($_tags)))); $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_singulars))); } } } unset($_tags, $_tag, $_singulars); /**/ for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) { $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_posts = c_ws_plugin__optimizemember_utils_gets::get_all_post_ids()))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_posts))); break; /* ALL Posts will be locked down. */ } else { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) { foreach ($_posts = preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_posts"]) as $_p) { if (strpos($_p, "all-") === 0 && preg_match("/^all-(.+)\$/", $_p, $_m)) { if (is_array($_p_of_type = c_ws_plugin__optimizemember_utils_gets::get_all_post_ids($_m[1])) && !empty($_p_of_type)) { $_posts = array_merge($_posts, $_p_of_type); } } } /**/ $_posts = array_unique(c_ws_plugin__optimizemember_utils_arrays::force_integers($_posts)); /**/ $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_posts))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_posts))); } } } unset($_posts, $_p, $_m, $_p_of_type); /**/ for ($n = $GLOBALS["WS_PLUGIN__"]["optimizemember"]["c"]["levels"]; $n >= 0; $n--) { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"] === "all" && (!$user || !current_user_can("access_optimizemember_level" . $n))) { $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_pages = c_ws_plugin__optimizemember_utils_gets::get_all_page_ids()))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_pages))); break; /* ALL Pages will be locked down. */ } else { if ($GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"] && (!$user || !current_user_can("access_optimizemember_level" . $n))) { $_pages = c_ws_plugin__optimizemember_utils_arrays::force_integers(preg_split("/[\r\n\t\\s;,]+/", $GLOBALS["WS_PLUGIN__"]["optimizemember"]["o"]["level" . $n . "_pages"])); /**/ $wp_query->set("post__in", array_unique(array_diff(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__in")), $_pages))); $wp_query->set("post__not_in", array_unique(array_merge(c_ws_plugin__optimizemember_utils_arrays::force_integers((array) $wp_query->get("post__not_in")), $_pages))); } } } unset($_pages); } /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__optimizemember_during_query_level_access", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ } } } /**/ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;'); do_action("ws_plugin__optimizemember_after_query_level_access", get_defined_vars()); unset($__refs, $__v); /* Unset defined __refs, __v. */ /**/ $initial_query = false; /* No longer. */ /**/ return; /* For uniformity. */ }
/** * * Shortcode parsing method for Membership page listings * @param array $atts * @return string|void */ function membership_page_listings($atts) { extract(shortcode_atts(array('style' => '', 'columns' => 1, 'product' => 0, 'category' => 0, 'subcategory' => 0, 'comments' => 0, 'drip_content' => 0, 'resize_thumb_height' => 0, 'show_children' => '', 'order' => '', 'hide_description' => 'N'), $atts)); $product = intval($product); $category = intval($category); $subcategory = intval($subcategory); $parentId = 0; $page_id = defined('OP_PAGEBUILDER_ID') ? OP_PAGEBUILDER_ID : $post->ID; $title_font = op_asset_font_style($atts); if (!empty($title_font)) { $title_style = "style='" . $title_font . "'"; } else { $title_style = ''; } $content_font = op_asset_font_style($atts, 'content_font_'); if (!empty($content_font)) { $content_style = "style='" . $content_font . "'"; } else { $content_style = ''; } // which children should we take? if (!empty($show_children)) { $parentId = $page_id; } else { if (!empty($product) && empty($category) && empty($subcategory)) { $parentId = $product; } else { if (!empty($product) && !empty($category) && empty($subcategory)) { $parentId = $category; } else { if (!empty($product) && !empty($category) && !empty($subcategory)) { $parentId = $subcategory; } } } } if (!empty($order)) { $temp = explode('|', $order); $order_column = $temp[0]; $order_direction = $temp[1]; } else { $order_column = 'post_title'; $order_direction = 'asc'; } $args = array('posts_per_page' => -1, 'sort_column' => $order_column, 'sort_order' => $order_direction, 'parent' => $parentId, 'hierarchical' => 0, 'post_status' => 'publish'); $pages = get_pages($args); if ($order_column == 'post_title') { if ($order_direction == 'asc') { usort($pages, array("OptimizePress_LiveEditor_Assets", "sortNaturalAsc")); } else { usort($pages, array("OptimizePress_LiveEditor_Assets", "sortNaturalDesc")); } } if (!empty($resize_thumb_height)) { $img_class = ' thumb_resize '; } else { $img_class = ''; } if (empty($pages) || $parentId == 0) { if (is_admin()) { return __('No child membership pages found! Note: Pages will only show in this once they are Published in Wordpress. Draft pages will not show', OP_SN); } } $html = ''; switch ($columns) { case 1: $class = 'page-listing one-col'; break; case 2: $class = 'page-listing two-col'; break; case 3: $class = 'page-listing three-col'; break; case 4: $class = 'page-listing four-col'; break; } foreach ($pages as $page) { /*if (defined("WS_PLUGIN__OPTIMIZEMEMBER_VERSION")) { if (!is_permitted_by_optimizemember($page->ID, "page")) { continue; } }*/ // drip content $dripContentHtml = ''; if (defined("WS_PLUGIN__OPTIMIZEMEMBER_VERSION")) { global $current_user; $hideContent = false; if (isset($GLOBALS['WS_PLUGIN__']['optimizemember']['o']['filter_wp_query']) && 'all' === $GLOBALS['WS_PLUGIN__']['optimizemember']['o']['filter_wp_query'][0]) { $hideContent = true; } if (!is_permitted_by_optimizemember($page->ID, "page") && true === $hideContent) { continue; } $unavailableContent = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_dripped_content($current_user); // getting content drip days setting $drip_days = get_post_meta($page->ID, "optimizemember_drip_days", true); if ($drip_days) { // if hide links is disabled in OPM general settings, content by this ID is not available to current user and show drip content timer is checked on // membership page listings element if (false === $hideContent && in_array($page->ID, $unavailableContent) && !empty($drip_content) && !current_user_can('level_10')) { //if ($array = is_page_protected_by_optimizemember($page->ID)) { // is it protected? $time = optimizemember_paid_registration_time(); if (!empty($time) && $time > strtotime("-" . $drip_days . " days")) { $daysTo = intval(($time + $drip_days * 86400 - time()) / 86400); if (0 === $daysTo) { $dripContentHtml = '<p class="pagelisting-drip-content">' . __('Less than a day left to be able to access this content', OP_SN) . '</p>'; } else { $dripContentHtml = '<p class="pagelisting-drip-content">' . sprintf(_n('%d day left to be able to access this content', '%d days left to be able to access this content', $daysTo, OP_SN), $daysTo) . '</p>'; } } //} } // if hide links is enabled in OPM general settings, content by this ID is not available to current user and show drip content timer is disabled on // membership page listings element - hide content completely if (true === $hideContent && in_array($page->ID, $unavailableContent) && !current_user_can('level_10')) { continue; } // if user is not logged in if (true === $hideContent && !is_user_logged_in()) { continue; } } } $meta = get_post_meta($page->ID); if (!empty($meta['_' . OP_SN . '_page_thumbnail'])) { $image = $meta['_' . OP_SN . '_page_thumbnail'][0]; $alt = $page->post_title; } if (!empty($comments)) { $comments = wp_count_comments($page->ID); $commentCount = $comments->approved; $commentHtml = '<p class="pagelisting-comment">' . sprintf(__('%d comments', OP_SN), $commentCount) . '</p>'; } else { $commentHtml = ''; } $meta = $meta['_' . OP_SN . '_membership'][0]; $meta = unserialize(unserialize($meta)); $html .= '<div class="' . $class . '">'; $html .= ' <a href="' . get_permalink($page->ID) . '" class="pagelisting-style-' . $style . ' border"> <div class="thumb">'; if ($image != '') { $html .= '<img src="' . $image . '" alt="' . $alt . '" class="scale-with-grid ' . $img_class . '" />'; } else { $html .= '<img src="' . OP_IMG . 'default-page-listings.png" alt="' . $alt . '" class="scale-with-grid ' . $img_class . '" />'; } $html .= '</div> <div class="content"> <h3 ' . $title_style . '>' . $page->post_title . '</h3>' . $commentHtml . $dripContentHtml; if ($hide_description !== 'Y') { $description = stripslashes(base64_decode($meta['description'])); if (strlen($description) > 140) { $html .= '<p ' . $content_style . '>' . substr($description, 0, 140) . '...</p>'; } else { $html .= '<p ' . $content_style . '>' . $description . '</p>'; } } $html .= '</div> </a> '; $html .= '</div>'; } $html .= '<script type="text/javascript">(function($){function resizeWindow(){if($(window).width()>=767)$(".container").each(function(){var e=0;var t=$(this).find("[class*=\'pagelisting-style-\']");t.css({height:"auto"});t.each(function(){var t=$(this).height();if(t>e)e=t});t.height(e)})}$(document).ready(function(){$(window).bind("resize",resizeWindow);$(window).bind("load",resizeWindow)})})(opjq);</script>' . "\n"; return $html; }
/** * wp_list_pages filter for excluding protected pages * @param array $exclude * @return array */ public static function excludePages($exclude) { if (is_array($_drips = c_ws_plugin__optimizemember_utils_gets::get_unavailable_singular_ids_with_dripped_content($user)) && !empty($_drips)) { $exclude = array_merge($exclude, $_drips); } return $exclude; }