Skip to content

Commit 6cb708a

Browse files
committed
Update index.php
1 parent 53c9d42 commit 6cb708a

File tree

1 file changed

+114
-114
lines changed

1 file changed

+114
-114
lines changed

index.php

Lines changed: 114 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,31 @@
88
// adapted & taken from https://gist.github.com/jameswburke/d0776d742ab74c469cd8af8dacd916fc
99
*/
1010

11-
class Unique_WP_Query extends WP_Query {
12-
function __construct($args) {
13-
// Act as a flag for pre_get_posts
14-
$args['unique_wp_query'] = true;
15-
16-
// don't get any pages specified by post__not_in:
17-
if (key_exists( 'post__not_in', $args)) {
18-
foreach ($args['post__not_in'] as $key => $id) {
19-
Unique_WP_Query_Manager::add_post_id($id);
20-
}
21-
unset($args['post__not_in']);
22-
}
23-
24-
// don't get the current post or page:
25-
if (is_single()) {
26-
$id = get_the_ID();
27-
Unique_WP_Query_Manager::add_post_id($id);
28-
}
29-
30-
// Initialize the WP_Query object like normal
31-
parent::__construct($args);
32-
33-
// Track used posts, and remove duplicates
34-
Unique_WP_Query_Manager::process_posts($this->posts, $this->post_count, $this->get('original_posts_per_page'));
35-
}
11+
class Unique_WP_Query extends WP_Query {
12+
function __construct($args) {
13+
// Act as a flag for pre_get_posts
14+
$args['unique_wp_query'] = true;
15+
16+
// don't get any pages specified by post__not_in:
17+
if (key_exists( 'post__not_in', $args)) {
18+
foreach ($args['post__not_in'] as $key => $id) {
19+
Unique_WP_Query_Manager::add_post_id($id);
20+
}
21+
unset($args['post__not_in']);
22+
}
23+
24+
// don't get the current post or page:
25+
if (is_single()) {
26+
$id = get_the_ID();
27+
Unique_WP_Query_Manager::add_post_id($id);
28+
}
29+
30+
// Initialize the WP_Query object like normal
31+
parent::__construct($args);
32+
33+
// Track used posts, and remove duplicates
34+
Unique_WP_Query_Manager::process_posts($this->posts, $this->post_count, $this->get('original_posts_per_page'));
35+
}
3636
}
3737

3838
/**
@@ -41,106 +41,106 @@ function __construct($args) {
4141
*/
4242
class Unique_WP_Query_Manager {
4343

44-
/**
45-
* Keep track of which post_ids have already been used
46-
* @var array
47-
*/
48-
public static $used_post_ids = [];
44+
/**
45+
* Keep track of which post_ids have already been used
46+
* @var array
47+
*/
48+
public static $used_post_ids = [];
4949

50-
/**
51-
* Keeps track of how many used_posts_ids exist
52-
* @var integer
53-
*/
54-
public static $used_post_count = 0;
50+
/**
51+
* Keeps track of how many used_posts_ids exist
52+
* @var integer
53+
*/
54+
public static $used_post_count = 0;
5555

5656
/**
5757
* Helper to make sure no duplicate ids are added
5858
* useful for content outside of the normal query
5959
*/
6060
public static function add_post_id($id) {
61-
if (!in_array($id, Unique_WP_Query_Manager::$used_post_ids, true)) {
62-
Unique_WP_Query_Manager::$used_post_ids[] = $id;
61+
if (!in_array($id, Unique_WP_Query_Manager::$used_post_ids, true)) {
62+
Unique_WP_Query_Manager::$used_post_ids[] = $id;
6363
Unique_WP_Query_Manager::$used_post_count = count(Unique_WP_Query_Manager::$used_post_ids);
64-
}
64+
}
6565
}
6666

67-
/**
68-
* Takes the posts and post count of a WP_Query object and
69-
* ensures that it removes posts that have already been used,
70-
* and then trims it to the necessary size.
71-
*
72-
* @param array &$posts
73-
* @param integer &$post_count
74-
*/
75-
public static function process_posts(&$posts, &$post_count, $original_posts_per_page) {
76-
77-
// Keep track of how many posts are acceptable to return
78-
$current_accepted_post_count = 0;
79-
80-
// Make sure we have posts
81-
if (empty((array) $posts)) {
82-
return;
83-
}
84-
85-
// Loop through all the found posts
86-
foreach ((array) $posts as $key => $post) {
87-
88-
// If we have enough acceptable posts, break the loop
89-
// Otherwise, determine if we've already used this post
90-
if ($original_posts_per_page > $current_accepted_post_count) {
91-
92-
// Has this post already been used?
93-
if (in_array($post->ID, Unique_WP_Query_Manager::$used_post_ids, true)) {
94-
// Remove from $posts
95-
unset($posts[$key]);
96-
97-
// And update count
98-
$post_count--;
99-
} else {
100-
// If not, add it to the list of used ids
101-
Unique_WP_Query_Manager::$used_post_ids[] = $post->ID;
102-
103-
// Update how many accepted posts we have
104-
$current_accepted_post_count++;
105-
}
106-
} else {
107-
// If we have enough acceptable posts, break the foreach
108-
// This prevents extra results from accidently being added to $used_post_ids
109-
break;
110-
}
111-
}
112-
113-
// Reindex the array correctly
114-
$posts = array_values($posts);
115-
116-
// Update the $used_post_count
117-
Unique_WP_Query_Manager::$used_post_count = count(Unique_WP_Query_Manager::$used_post_ids);
118-
119-
// Trim any excess posts and update $post_count
120-
if (count($posts) > $original_posts_per_page) {
121-
122-
// Remove extra posts
123-
$posts = array_slice($posts, 0, $original_posts_per_page);
124-
125-
// Update post count to our new value
126-
$post_count = $original_posts_per_page;
127-
}
128-
}
67+
/**
68+
* Takes the posts and post count of a WP_Query object and
69+
* ensures that it removes posts that have already been used,
70+
* and then trims it to the necessary size.
71+
*
72+
* @param array &$posts
73+
* @param integer &$post_count
74+
*/
75+
public static function process_posts(&$posts, &$post_count, $original_posts_per_page) {
76+
77+
// Keep track of how many posts are acceptable to return
78+
$current_accepted_post_count = 0;
79+
80+
// Make sure we have posts
81+
if (empty((array) $posts)) {
82+
return;
83+
}
84+
85+
// Loop through all the found posts
86+
foreach ((array) $posts as $key => $post) {
87+
88+
// If we have enough acceptable posts, break the loop
89+
// Otherwise, determine if we've already used this post
90+
if ($original_posts_per_page > $current_accepted_post_count) {
91+
92+
// Has this post already been used?
93+
if (in_array($post->ID, Unique_WP_Query_Manager::$used_post_ids, true)) {
94+
// Remove from $posts
95+
unset($posts[$key]);
96+
97+
// And update count
98+
$post_count--;
99+
} else {
100+
// If not, add it to the list of used ids
101+
Unique_WP_Query_Manager::$used_post_ids[] = $post->ID;
102+
103+
// Update how many accepted posts we have
104+
$current_accepted_post_count++;
105+
}
106+
} else {
107+
// If we have enough acceptable posts, break the foreach
108+
// This prevents extra results from accidently being added to $used_post_ids
109+
break;
110+
}
111+
}
112+
113+
// Reindex the array correctly
114+
$posts = array_values($posts);
115+
116+
// Update the $used_post_count
117+
Unique_WP_Query_Manager::$used_post_count = count(Unique_WP_Query_Manager::$used_post_ids);
118+
119+
// Trim any excess posts and update $post_count
120+
if (count($posts) > $original_posts_per_page) {
121+
122+
// Remove extra posts
123+
$posts = array_slice($posts, 0, $original_posts_per_page);
124+
125+
// Update post count to our new value
126+
$post_count = $original_posts_per_page;
127+
}
128+
}
129129
}
130130

131131
if (!function_exists('unique_wp_query_pre_get_posts')) {
132-
/**
133-
* Increase the posts_per_page value by the number of posts that have
134-
* already been used. Executes as the last pre_get_posts action.
135-
*/
136-
function unique_wp_query_pre_get_posts(&$query) {
137-
if (true === $query->get('unique_wp_query')) {
138-
$posts_per_page = $query->get('posts_per_page');
139-
// Increase posts_per_page by the amount of used post_ids
140-
$query->set('original_posts_per_page', min($posts_per_page, 200));
141-
$query->set('posts_per_page', min($posts_per_page + Unique_WP_Query_Manager::$used_post_count, 200));
142-
}
143-
}
144-
145-
add_action('pre_get_posts', 'unique_wp_query_pre_get_posts', PHP_INT_MAX);
132+
/**
133+
* Increase the posts_per_page value by the number of posts that have
134+
* already been used. Executes as the last pre_get_posts action.
135+
*/
136+
function unique_wp_query_pre_get_posts(&$query) {
137+
if (true === $query->get('unique_wp_query')) {
138+
$posts_per_page = $query->get('posts_per_page');
139+
// Increase posts_per_page by the amount of used post_ids
140+
$query->set('original_posts_per_page', min($posts_per_page, 200));
141+
$query->set('posts_per_page', min($posts_per_page + Unique_WP_Query_Manager::$used_post_count, 200));
142+
}
143+
}
144+
145+
add_action('pre_get_posts', 'unique_wp_query_pre_get_posts', PHP_INT_MAX);
146146
}

0 commit comments

Comments
 (0)