diff --git a/includes/classes/DistributorPost.php b/includes/classes/DistributorPost.php index 17d1d5eb3..fef6d0c18 100644 --- a/includes/classes/DistributorPost.php +++ b/includes/classes/DistributorPost.php @@ -748,7 +748,11 @@ protected function parse_blocks_for_attachment_id( $block ) { } if ( in_array( $block['blockName'], $block_names, true ) ) { - $media[] = $block['attrs'][ $media_blocks[ $block['blockName'] ] ]; + $attribute_key = $media_blocks[ $block['blockName'] ]; + + if ( isset( $block['attrs'][ $attribute_key ] ) ) { + $media[] = $block['attrs'][ $attribute_key ]; + } } return $media; diff --git a/includes/classes/PullListTable.php b/includes/classes/PullListTable.php index 531d6f408..759afe833 100644 --- a/includes/classes/PullListTable.php +++ b/includes/classes/PullListTable.php @@ -437,19 +437,14 @@ public function prepare_items() { /** Process bulk action */ $this->process_bulk_action(); - $per_page = $this->get_items_per_page( 'pull_posts_per_page', get_option( 'posts_per_page' ) ); - + $per_page = $this->get_items_per_page( 'pull_posts_per_page', get_option( 'posts_per_page' ) ); $current_page = $this->get_pagenum(); // Support 'View all' filtering for internal connections. - if ( is_a( $connection_now, '\Distributor\InternalConnections\NetworkSiteConnection' ) ) { - if ( empty( $connection_now->pull_post_type ) || 'all' === $connection_now->pull_post_type ) { - $post_type = wp_list_pluck( $connection_now->pull_post_types, 'slug' ); - } else { - $post_type = $connection_now->pull_post_type; - } + if ( empty( $connection_now->pull_post_type ) || 'all' === $connection_now->pull_post_type ) { + $post_type = wp_list_pluck( $connection_now->pull_post_types, 'slug' ); } else { - $post_type = $connection_now->pull_post_type ? $connection_now->pull_post_type : 'post'; + $post_type = $connection_now->pull_post_type; } $remote_get_args = [ @@ -527,18 +522,23 @@ public function prepare_items() { $remote_get_args['paged'] = 1; } + if ( ! is_array( $remote_get_args['post_type'] ) ) { + $remote_get_args['post_type'] = [ $remote_get_args['post_type'] ]; + } + + $total_items = 0; + $response_data = array(); + + // Setup remote connection from the connection object. $remote_get = $connection_now->remote_get( $remote_get_args ); + // Check and throw error if there is one. if ( is_wp_error( $remote_get ) ) { $this->pull_error = $remote_get->get_error_messages(); - - return; } - // Get total items retrieved from the remote request if not already set. - if ( false === $total_items ) { - $total_items = $remote_get['total_items']; - } + $total_items = $remote_get['total_items']; + $response_data = array_merge( $response_data, array_values( $remote_get['items'] ) ); $this->set_pagination_args( [ @@ -547,7 +547,7 @@ public function prepare_items() { ] ); - foreach ( $remote_get['items'] as $item ) { + foreach ( $response_data as $item ) { $this->items[] = $item; } } @@ -612,17 +612,15 @@ public function extra_tablenav( $which ) { $connection_type = 'external'; } - if ( $connection_now && $connection_now->pull_post_types && $connection_now->pull_post_type ) : + if ( $connection_now && $connection_now->pull_post_types ) : ?>
pull_post_type = ''; $connection_now->pull_post_types = \Distributor\Utils\available_pull_post_types( $connection_now, $connection_type ); // Ensure we have at least one post type to pull. $connection_now->pull_post_type = ''; if ( ! empty( $connection_now->pull_post_types ) ) { - $connection_now->pull_post_type = ( 'internal' === $connection_type ) ? 'all' : $connection_now->pull_post_types[0]['slug']; + $connection_now->pull_post_type = 'all'; } // Set the post type we want to pull (if any) // This is either from a query param, "post" post type, or the first in the list foreach ( $connection_now->pull_post_types as $post_type ) { - if ( isset( $_GET['pull_post_type'] ) ) { // @codingStandardsIgnoreLine No nonce needed here. - if ( $_GET['pull_post_type'] === $post_type['slug'] ) { // @codingStandardsIgnoreLine Comparing values, no nonce needed. - $connection_now->pull_post_type = $post_type['slug']; + if ( ! empty( $_GET['pull_post_type'] ) ) { + if ( 'all' === $_GET['pull_post_type'] ) { + $connection_now->pull_post_type = 'all'; break; - } - } else { - if ( 'post' === $post_type['slug'] && 'external' === $connection_type ) { + } elseif ( $_GET['pull_post_type'] === $post_type['slug'] ) { $connection_now->pull_post_type = $post_type['slug']; break; } + } else { + $connection_now->pull_post_type = ! empty( $post_type['slug'] ) ? $post_type['slug'] : 'all'; + break; } } ?> diff --git a/includes/rest-api.php b/includes/rest-api.php index 41dceed42..cf7d914b1 100644 --- a/includes/rest-api.php +++ b/includes/rest-api.php @@ -586,12 +586,7 @@ function distributor_meta() { * Check user permissions for available post types */ function check_post_types_permissions() { - $types = get_post_types( - array( - 'show_in_rest' => true, - ), - 'objects' - ); + $types = Utils\distributable_post_types( 'objects' ); $response = array( 'can_get' => array(), @@ -623,10 +618,11 @@ function check_post_types_permissions() { * @return \WP_REST_Response|\WP_Error */ function get_pull_content_list( $request ) { - $args = [ + $post_type = ! empty( $request['post_type'] ) ? $request['post_type'] : array( 'post' ); + $args = [ 'posts_per_page' => isset( $request['posts_per_page'] ) ? $request['posts_per_page'] : 20, 'paged' => isset( $request['page'] ) ? $request['page'] : 1, - 'post_type' => isset( $request['post_type'] ) ? $request['post_type'] : 'post', + 'post_type' => $post_type, 'post_status' => isset( $request['post_status'] ) ? $request['post_status'] : array( 'any' ), 'order' => ! empty( $request['order'] ) ? strtoupper( $request['order'] ) : 'DESC', ]; diff --git a/includes/utils.php b/includes/utils.php index 1e53a57f9..607a07985 100644 --- a/includes/utils.php +++ b/includes/utils.php @@ -434,7 +434,13 @@ function excluded_meta() { */ function prepare_meta( $post_id ) { update_postmeta_cache( array( $post_id ) ); - $meta = get_post_meta( $post_id ); + $meta = get_post_meta( $post_id ); + + if ( false === $meta ) { + return array(); + } + + $meta = is_array( $meta ) ? $meta : array(); $prepared_meta = array(); $excluded_meta = excluded_meta();