PluginProbe ʕ •ᴥ•ʔ
Nested Pages / 3.0.8
Nested Pages v3.0.8
3.3.1 3.2.15 3.2.14 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 trunk 1.0 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.3.0 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.2 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.3.1 1.6.3.2 1.6.4 1.6.5 1.6.5.1 1.6.5.2 1.6.6 1.6.7 1.6.8 1.7.0 1.7.1 2.0.1 2.0.2 2.0.3 2.0.4 3.0.1 3.0.10 3.0.11 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.20 3.1.21 3.1.22 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7
wp-nested-pages / app / Entities / Post / PostFactory.php
wp-nested-pages / app / Entities / Post Last commit date
PostCloner.php 8 years ago PostDataFactory.php 8 years ago PostFactory.php 8 years ago PostRepository.php 8 years ago PostTrashActions.php 8 years ago PostUpdateRepository.php 7 years ago PrivatePostParent.php 8 years ago
PostFactory.php
112 lines
1 <?php
2 namespace NestedPages\Entities\Post;
3
4 use NestedPages\Entities\Post\PostRepository;
5 use NestedPages\Entities\Post\PostUpdateRepository;
6
7 /**
8 * Factory class for adding new posts
9 */
10 class PostFactory
11 {
12 /**
13 * Post Repository
14 * @var object
15 */
16 private $post_repo;
17
18 /**
19 * Post Repository
20 * @var object
21 */
22 private $post_update_repo;
23
24 /**
25 * New Page IDs
26 * @var array
27 */
28 private $new_ids = [];
29
30
31 public function __construct()
32 {
33 $this->post_repo = new PostRepository;
34 $this->post_update_repo = new PostUpdateRepository;
35 }
36
37 /**
38 * Create New Child Pages
39 */
40 public function createChildPosts($data)
41 {
42 foreach($data['post_title'] as $key => $title){
43 $post_type = sanitize_text_field($data['post_type']);
44 $post = [
45 'post_title' => sanitize_text_field($title),
46 'post_status' => sanitize_text_field($data['_status']),
47 'post_author' => sanitize_text_field($data['post_author']),
48 'post_parent' => sanitize_text_field($data['parent_id']),
49 'post_type' => $post_type
50 ];
51 $new_page_id = wp_insert_post($post);
52 $data['post_id'] = $new_page_id;
53 if ( isset($data['page_template']) ) $this->post_update_repo->updateTemplate($data);
54 if ( isset($data['nav_status']) ) $this->post_update_repo->updateNavStatus($data);
55 $this->new_ids[$key] = $new_page_id;
56 }
57 return $this->getNewPosts($post_type);
58 }
59
60 /**
61 * Create new Posts before/after a specified post
62 */
63 public function createBeforeAfterPosts($data)
64 {
65 global $wpdb;
66 $menu_order = 0;
67 $parent = false;
68 $post_type = sanitize_text_field($data['post_type']);
69 $after = ( isset($data['after_id']) && $data['after_id'] !== '' ) ? true : false;
70 $reference_post = ( $after ) ? intval($data['after_id']) : intval($data['before_id']);
71
72 // Get the source post, so the reference points for menu order can be determined
73 $pq = new \WP_Query([
74 'post_type' => $post_type,
75 'posts_per_page' => 1,
76 'p' => $reference_post
77 ]);
78 if ( $pq->have_posts() ) :
79 $parent = intval($pq->posts[0]->post_parent);
80 $menu_order = $pq->posts[0]->menu_order;
81 endif; wp_reset_postdata();
82
83 if ( $parent ) $data['parent_id'] = $parent;
84 $new_posts = $this->createChildPosts($data);
85
86 if ( $after ) $menu_order = $menu_order + 1;
87 $new_post_count = count($new_posts);
88 $first_new_id = $new_posts[0]['id'];
89 $last_new_id = $new_posts[count($new_posts) - 1]['id'];
90
91 $sql = "UPDATE `$wpdb->posts` SET menu_order = menu_order+%d WHERE post_parent = %d AND (post_status = 'publish' OR post_status = 'draft') AND (post_type = '%s'";
92 if ( $post_type == 'page' ) $sql .= " OR post_type = 'np-redirect'";
93 $sql .= ") AND (menu_order >= %d) ORDER BY menu_order;";
94
95 // Reorder All posts after the new ones
96 $wpdb->query($wpdb->prepare($sql, [$new_post_count, $parent, $post_type, $menu_order]));
97 // Reorder the new posts menu_order
98 $wpdb->query($wpdb->prepare("SET @start_order := %d;", [$menu_order-1]));
99 $wpdb->query($wpdb->prepare("UPDATE `$wpdb->posts` SET menu_order = (@start_order:=@start_order+1) WHERE post_parent = %d AND (post_type = '%s') AND (ID BETWEEN %d AND %d) ORDER BY menu_order;", [$parent, $post_type, $first_new_id, $last_new_id]));
100
101 return $new_posts;
102 }
103
104 /**
105 * Get Array of New Pages
106 */
107 private function getNewPosts($post_type)
108 {
109 $new_posts = $this->post_repo->postArray($this->new_ids, $post_type);
110 return $new_posts;
111 }
112 }