PostCloner.php
3 years ago
PostDataFactory.php
3 years ago
PostFactory.php
3 days ago
PostRepository.php
5 years ago
PostSaveActions.php
3 years ago
PostTrashActions.php
8 years ago
PostUpdateRepository.php
3 days ago
PrivatePostParent.php
3 years ago
PrivatePostParent.php
69 lines
| 1 | <?php |
| 2 | namespace NestedPages\Entities\Post; |
| 3 | |
| 4 | /** |
| 5 | * Enables Private Posts/Pages in the Post Edit Dropdown |
| 6 | * Fixes bug in WP Core where child posts of a private/draft post become un-nested when editing |
| 7 | * @link https://core.trac.wordpress.org/ticket/8592#comment:129 |
| 8 | */ |
| 9 | class PrivatePostParent |
| 10 | { |
| 11 | public function __construct() |
| 12 | { |
| 13 | add_filter('wp_dropdown_pages', [$this, 'metabox'], 10, 3); |
| 14 | } |
| 15 | |
| 16 | public function metabox($output, $arguments = [], $pages = []) |
| 17 | { |
| 18 | global $post; |
| 19 | if ( !$post ) return $output; |
| 20 | if ( !isset($arguments['post_type']) ) return $output; |
| 21 | if ( !isset($arguments['name']) ) return $output; |
| 22 | if ( $arguments['post_type'] !== $post->post_type ) return $output; |
| 23 | if ( $arguments['name'] !== 'parent_id' ) return $output; |
| 24 | |
| 25 | $args = [ |
| 26 | 'post_type' => $post->post_type, |
| 27 | 'exclude_tree' => $post->ID, |
| 28 | 'selected' => $post->post_parent, |
| 29 | 'name' => 'parent_id', |
| 30 | 'show_option_none' => __('(no parent)'), |
| 31 | 'sort_column' => 'menu_order, post_title', |
| 32 | 'echo' => 0, |
| 33 | 'post_status' => ['publish', 'private', 'draft'], |
| 34 | ]; |
| 35 | $args = apply_filters( 'page_attributes_dropdown_pages_args', $args, $post ); |
| 36 | |
| 37 | $defaults = [ |
| 38 | 'depth' => 0, |
| 39 | 'child_of' => 0, |
| 40 | 'selected' => 0, |
| 41 | 'echo' => 1, |
| 42 | 'name' => 'page_id', |
| 43 | 'id' => '', |
| 44 | 'show_option_none' => '', |
| 45 | 'show_option_no_change' => '', |
| 46 | 'option_none_value' => '', |
| 47 | ]; |
| 48 | |
| 49 | $r = wp_parse_args($args, $defaults); |
| 50 | extract($r, EXTR_SKIP); |
| 51 | |
| 52 | $pages = get_pages($r); |
| 53 | $name = esc_attr($name); |
| 54 | |
| 55 | // Back-compat with old system where both id and name were based on $name argument |
| 56 | if (empty($id)) $id = $name; |
| 57 | |
| 58 | if (empty($pages)) return; |
| 59 | |
| 60 | $output = "<select name=\"$name\" id=\"$id\">\n"; |
| 61 | |
| 62 | if ($show_option_no_change) $output .= "\t<option value=\"-1\">$show_option_no_change</option>"; |
| 63 | if ($show_option_none) $output .= "\t<option value=\"" . esc_attr($option_none_value) . "\">$show_option_none</option>\n"; |
| 64 | $output .= walk_page_dropdown_tree($pages, $depth, $r); |
| 65 | $output .= "</select>\n"; |
| 66 | |
| 67 | return $output; |
| 68 | } |
| 69 | } |