← All changes
|
backend/src/Data/Repository/PostsRepository.php
+57
-13
0.7.0.4
→
1.5.5.1
View file →
| @@ -24,9 +24,9 @@ | ||
| 24 | 24 | * @param callable|null $transform |
| 25 | 25 | * |
| 26 | 26 | * @return array|mixed|\WP_Post|null |
| 27 | 27 | */ |
| 28 | - public function find( $id, callable $transform = null ) { | |
| 28 | + public function find( $id, ?callable $transform = null ) { | |
| 29 | 29 | $post = get_post( $id ); |
| 30 | 30 | |
| 31 | 31 | if ( ! is_null( $transform ) ) { |
| 32 | 32 | $post = call_user_func( $transform, $post ); |
| @@ -40,9 +40,9 @@ | ||
| 40 | 40 | * @param callable|null $transform |
| 41 | 41 | * |
| 42 | 42 | * @return array |
| 43 | 43 | */ |
| 44 | - public function find_where( array $args = [], callable $transform = null ) { | |
| 44 | + public function find_where( array $args = [], ?callable $transform = null ) { | |
| 45 | 45 | $posts = $this->query( $args )->posts; |
| 46 | 46 | |
| 47 | 47 | if ( ! is_null( $transform ) ) { |
| 48 | 48 | $posts = array_map( $transform, $posts ); |
| @@ -56,9 +56,9 @@ | ||
| 56 | 56 | * @param callable|null $transform |
| 57 | 57 | * |
| 58 | 58 | * @return array |
| 59 | 59 | */ |
| 60 | - public function find_by_label( int $label_id, callable $transform = null ) { | |
| 60 | + public function find_by_label( int $label_id, ?callable $transform = null ) { | |
| 61 | 61 | $labels = $this->notations->get_labels_by_id( 'post', $label_id ); |
| 62 | 62 | $post_ids = []; |
| 63 | 63 | |
| 64 | 64 | foreach ( $labels as $label ) { |
| @@ -86,9 +86,9 @@ | ||
| 86 | 86 | * @param callable|null $transform |
| 87 | 87 | * |
| 88 | 88 | * @return Pager |
| 89 | 89 | */ |
| 90 | - public function paginate( array $args = [], callable $transform = null ) { | |
| 90 | + public function paginate( array $args = [], ?callable $transform = null ) { | |
| 91 | 91 | $query = $this->query( $args ); |
| 92 | 92 | |
| 93 | 93 | $pager = new Pager( |
| 94 | 94 | $query->posts, |
| @@ -119,20 +119,54 @@ | ||
| 119 | 119 | return $data; |
| 120 | 120 | } |
| 121 | 121 | |
| 122 | 122 | /** |
| 123 | + * Plural label from registered post type (WP_Post_Type::$label), not contextual list titles. | |
| 124 | + * @param \WP_Post_Type $type | |
| 125 | + * @return string | |
| 126 | + */ | |
| 127 | + private function get_stable_plural_label( \WP_Post_Type $type ) { | |
| 128 | + if ( isset( $type->label ) && '' !== $type->label ) { | |
| 129 | + return $type->label; | |
| 130 | + } | |
| 131 | + | |
| 132 | + return $type->labels->name; | |
| 133 | + } | |
| 134 | + | |
| 135 | + /** | |
| 123 | 136 | * Get array of post types registered in WordPress |
| 124 | 137 | * @return array |
| 125 | 138 | */ |
| 126 | 139 | public function get_types() { |
| 127 | 140 | $data = []; |
| 128 | - $types = get_post_types( | |
| 129 | - [ | |
| 130 | - 'show_ui' => true, | |
| 131 | - ], | |
| 132 | - 'objects' | |
| 133 | - ); | |
| 141 | + $types = get_post_types( [], 'objects' ); | |
| 134 | 142 | |
| 143 | + // Types with show_ui false that we want to show | |
| 144 | + $known = apply_filters( 'fl_assistant_post_types_known', [ | |
| 145 | + 'wp_template', | |
| 146 | + 'wp_template_part', | |
| 147 | + 'fl_code', | |
| 148 | + ] ); | |
| 149 | + | |
| 150 | + // Of the types above, those whose items are portable enough to bulk add to a | |
| 151 | + // cloud library. Opt-in only: block templates are scoped to a theme via the | |
| 152 | + // wp_theme taxonomy and code snippets have their own library item type, so | |
| 153 | + // neither belongs in the upload picker. Design systems are portable by UUID, | |
| 154 | + // so they do. | |
| 155 | + $library = apply_filters( 'fl_assistant_post_types_library', [ | |
| 156 | + 'fl-design-system', | |
| 157 | + ] ); | |
| 158 | + | |
| 159 | + // Types to never show | |
| 160 | + $ignore = [ | |
| 161 | + 'attachment', | |
| 162 | + 'wp_navigation', | |
| 163 | + 'vcv_tutorials', | |
| 164 | + 'elementor_snippet', | |
| 165 | + 'elementor_font', | |
| 166 | + 'elementor_icons', | |
| 167 | + ]; | |
| 168 | + | |
| 135 | 169 | foreach ( $types as $slug => $type ) { |
| 136 | 170 | if ( ! isset( $type->cap->edit_others_posts ) ) { |
| 137 | 171 | continue; |
| 138 | 172 | } |
| @@ -138,16 +172,21 @@ | ||
| 138 | 172 | } |
| 139 | 173 | if ( ! current_user_can( $type->cap->edit_others_posts ) ) { |
| 140 | 174 | continue; |
| 141 | 175 | } |
| 142 | - if ( 'attachment' === $slug ) { | |
| 176 | + if ( ! $type->show_ui && ! in_array( $slug, $known ) ) { | |
| 143 | 177 | continue; |
| 144 | 178 | } |
| 179 | + if ( in_array( $slug, $ignore ) ) { | |
| 180 | + continue; | |
| 181 | + } | |
| 145 | 182 | if ( ! function_exists( 'get_page_templates' ) ) { |
| 146 | 183 | require_once ABSPATH . 'wp-admin/includes/theme.php'; |
| 147 | 184 | } |
| 148 | 185 | |
| 149 | 186 | $data[ $slug ] = [ |
| 187 | + 'canView' => $type->public || $type->publicly_queryable || in_array( $slug, $library ), | |
| 188 | + 'hasPublicUrl' => $type->public || $type->publicly_queryable, | |
| 150 | 189 | 'canExport' => $type->can_export, |
| 151 | 190 | 'hasArchive' => $type->has_archive, |
| 152 | 191 | 'isHierarchical' => $type->hierarchical, |
| 153 | 192 | 'builtin' => $type->_builtin, |
| @@ -161,9 +200,9 @@ | ||
| 161 | 200 | 'order' => post_type_supports( $slug, 'page-attributes' ), |
| 162 | 201 | ], |
| 163 | 202 | 'labels' => [ |
| 164 | 203 | 'singular' => esc_html( $type->labels->singular_name ), |
| 165 | - 'plural' => esc_html( $type->labels->name ), | |
| 204 | + 'plural' => esc_html( $this->get_stable_plural_label( $type ) ), | |
| 166 | 205 | 'newItem' => esc_html( $type->labels->new_item ), |
| 167 | 206 | 'editItem' => esc_html( $type->labels->edit_item ), |
| 168 | 207 | 'viewItem' => esc_html( $type->labels->view_item ), |
| 169 | 208 | ], |
| @@ -168,8 +207,13 @@ | ||
| 168 | 207 | 'viewItem' => esc_html( $type->labels->view_item ), |
| 169 | 208 | ], |
| 170 | 209 | ]; |
| 171 | 210 | |
| 211 | + if ( 'wp_template' === $slug || 'wp_template_part' === $slug ) { | |
| 212 | + $data[ $slug ]['labels']['singular'] = sprintf( esc_html_x( 'Block %s', 'Singular type name.', 'assistant' ), $type->labels->singular_name ); | |
| 213 | + $data[ $slug ]['labels']['plural'] = sprintf( esc_html_x( 'Block %s', 'Plural type name.', 'assistant' ), $this->get_stable_plural_label( $type ) ); | |
| 214 | + } | |
| 215 | + | |
| 172 | 216 | $taxonomies = get_object_taxonomies( $slug, 'objects' ); |
| 173 | 217 | |
| 174 | 218 | foreach ( $taxonomies as $tax_slug => $tax ) { |
| 175 | 219 | if ( ! $tax->public || ! $tax->show_ui ) { |
| @@ -200,9 +244,9 @@ | ||
| 200 | 244 | 'isHierarchical' => $taxonomy->hierarchical, |
| 201 | 245 | 'labels' => [ |
| 202 | 246 | 'singular' => esc_html( $taxonomy->labels->singular_name ), |
| 203 | 247 | 'plural' => esc_html( $taxonomy->labels->name ), |
| 204 | - 'newItem' => sprintf( esc_html_x( 'New %s', 'Singular term name.', 'fl-assistant' ), $taxonomy->labels->singular_name ), | |
| 248 | + 'newItem' => sprintf( esc_html_x( 'New %s', 'Singular term name.', 'assistant' ), $taxonomy->labels->singular_name ), | |
| 205 | 249 | 'addNewItem' => esc_html( $taxonomy->labels->add_new_item ), |
| 206 | 250 | 'editItem' => esc_html( $taxonomy->labels->edit_item ), |
| 207 | 251 | ], |
| 208 | 252 | ]; |