false ] ); $terms_by_id = []; if ( is_wp_error( $terms ) || empty( $terms ) ) { return []; } foreach ( $terms as $term ) { $term_id = $term->term_id; $terms_by_id[ $term_id ]['id'] = $term_id; $terms_by_id[ $term_id ]['name'] = $term->name; $terms_by_id[ $term_id ]['slug'] = $term->slug; $terms_by_id[ $term_id ]['count'] = $term->count; } return $terms_by_id; } /** * Processes item taxonomies for inclusion in the theme builder library UI items data. * * @since 4.19.0 * * @param WP_POST $post Unprocessed item. * @param object $item Currently processing item. * @param int $index The item's index position. * @param array[] $item_terms Processed items. * @param string $taxonomy_name Item name. * @param string $type Item type. * * @return void */ function et_code_snippets_library_process_item_taxonomy( $post, $item, $index, &$item_terms, $taxonomy_name, $type ) { $terms = wp_get_post_terms( $post->ID, $taxonomy_name ); if ( ! $terms ) { if ( 'category' === $type ) { $item->category_slug = 'uncategorized'; } return; } foreach ( $terms as $term ) { $term_name = et_core_intentionally_unescaped( $term->name, 'react_jsx' ); if ( ! isset( $item_terms[ $term->term_id ] ) ) { $item_terms[ $term->term_id ] = array( 'id' => $term->term_id, 'name' => $term_name, 'slug' => $term->slug, 'items' => array(), ); } $item_terms[ $term->term_id ]['items'][] = $index; if ( 'category' === $type ) { $item->categories[] = $term_name; } else { $item->tags[] = $term_name; } $item->{$type . '_ids'}[] = $term->term_id; if ( ! isset( $item->{$type . '_slug'} ) ) { $item->{$type . '_slug'} = $term->slug; } $id = get_post_meta( $post->ID, "_primary_{$taxonomy_name}", true ); if ( $id ) { // $id is a string, $term->term_id is an int. if ( $id === $term->term_id ) { // This is the primary term (used in the item URL). $item->{$type . '_slug'} = $term->slug; } } } } /** * Sanitize txonomies. * * @since 4.19.0 * * @param array $taxonomies Array of id for categories and tags. * * @return array Sanitized value. */ function et_code_snippets_library_sanitize_taxonomies( $taxonomies ) { if ( empty( $taxonomies ) ) { return array(); } return array_unique( array_map( 'intval', $taxonomies ) ); } /** * Get all terms of an item and merge any newly passed IDs with the list. * * @since 4.19.0 * * @param string $new_terms_list List of new terms. * @param array $taxonomies Taxonomies. * @param string $taxonomy_name Taxonomy name. * * @return array */ function et_code_snippets_library_create_and_get_all_item_terms( $new_terms_list, $taxonomies, $taxonomy_name ) { $new_names_array = explode( ',', $new_terms_list ); foreach ( $new_names_array as $new_name ) { if ( '' !== $new_name ) { $new_term = wp_insert_term( $new_name, $taxonomy_name ); if ( ! is_wp_error( $new_term ) ) { $taxonomies[] = $new_term['term_id']; } elseif ( ! empty( $new_term->error_data ) && ! empty( $new_term->error_data['term_exists'] ) ) { $taxonomies[] = $new_term->error_data['term_exists']; } } } return $taxonomies; } /** * Export the Code Snippets library item from cloud. * * @since 4.19.0 * * @param array $cloud_content Optional cloud content. * * @return array */ function et_code_snippets_library_export_cloud_item( $cloud_content ) { if ( ! current_user_can( 'edit_posts' ) ) { wp_die(); } $content = array( 'context' => 'et_code_snippet' ); $content['snippet_type'] = $cloud_content['snippet_type']; $content['data'] = $cloud_content['data']; return $content; } /** * Export the Code Snippets library item local item. * * @since 4.19.0 * * @param int $post_id Item ID. * * @return array */ function et_code_snippets_library_export_local_item( $post_id ) { if ( ! current_user_can( 'edit_post', $post_id ) ) { wp_die(); } $snippet = get_post( $post_id ); $snippet_type = current( wp_get_post_terms( $post_id, 'et_code_snippet_type' ) ); $content = array( 'context' => 'et_code_snippet' ); $content['snippet_type'] = $snippet_type->slug; $content['data'] = $snippet->post_content; return $content; } /** * Export the Code Snippets library item directly. * * @since 4.19.0 * @param array $direct_export Contain snippet-type and content. * * @return array */ function et_code_snippets_library_export_directly( $direct_export ) { if ( ! current_user_can( 'edit_posts' ) ) { wp_die(); } if ( ! trim( $direct_export['content'] ) ) { return false; } $content = array( 'context' => 'et_code_snippet' ); $content['snippet_type'] = $direct_export['snippet_type']; $content['data'] = stripslashes_deep( $direct_export['content'] ); return $content; } /** * Export the Code Snippets library item. * * @since 4.19.0 * * @param int $id Item ID. * @param array $cloud_content Optional cloud content. * @param array $direct_export Contain snippet-type and content. * * @return array */ function et_code_snippets_library_export_item_data( $id, $cloud_content, $direct_export ) { if ( ! current_user_can( 'edit_posts' ) ) { wp_die(); } if ( empty( $id ) ) { return false; } $id = absint( $id ); if ( empty( $direct_export ) ) { $export_content = empty( $cloud_content ) ? et_code_snippets_library_export_local_item( $id ) : et_code_snippets_library_export_cloud_item( $cloud_content ); } else { $export_content = et_code_snippets_library_export_directly( $direct_export ); } if ( empty( $export_content ) ) { return; } $transient = 'et_code_snippet_export_' . get_current_user_id() . '_' . $id; set_transient( $transient, $export_content, 60 * 60 * 24 ); return $export_content; } /** * Import the Code Snippets library item. * * @since 4.19.0 * * @return array */ function et_code_snippets_library_import_item_data() { if ( ! current_user_can( 'edit_posts' ) || ! isset( $_POST['fileData'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified in `et_builder_security_check` before calling this function. return false; } // phpcs:disable ET.Sniffs.ValidatedSanitizedInput.InputNotSanitized -- wp_insert_post function does sanitization. $file_data = $_POST['fileData']; // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified in `et_builder_security_check` before calling this function. $file_name = sanitize_text_field( $file_data['title'] ); $file_content = isset( $_POST['fileContent'] ) ? json_decode( stripslashes( $_POST['fileContent'] ), true ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified in `et_builder_security_check` before calling this function. // phpcs:enable if ( ! isset( $file_data['type'] ) ) { return false; } $snippet = array( 'item_name' => $file_name, 'item_type' => $file_data['type'], 'content' => $file_content, ); return et_code_snippets_save_to_local_library( $snippet ); } /** * Save a code snippet to local library. * * @param array $item Item data. */ function et_code_snippets_save_to_local_library( $item ) { $_ = et_(); $item_name = sanitize_text_field( $_->array_get( $item, 'item_name', '' ) ); $content = $_->array_get( $item, 'content', '' ); $post_id = wp_insert_post( array( 'post_type' => ET_CODE_SNIPPET_POST_TYPE, 'post_status' => 'publish', 'post_title' => $item_name, 'post_content' => $content, ) ); et_local_library_set_item_taxonomy( $post_id, $item ); return $post_id; }