Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
36.00% covered (danger)
36.00%
9 / 25
9.09% covered (danger)
9.09%
1 / 11
CRAP
0.00% covered (danger)
0.00%
0 / 1
Search
39.13% covered (danger)
39.13%
9 / 23
9.09% covered (danger)
9.09%
1 / 11
65.74
0.00% covered (danger)
0.00%
0 / 1
 name
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 add_search_post_meta_whitelist
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 add_search_options_whitelist
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 add_ai_answer_post_types
85.71% covered (warning)
85.71%
6 / 7
0.00% covered (danger)
0.00%
0 / 1
3.03
 is_indexable
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 get_postmeta_spec
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 get_all_postmeta_keys
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 get_all_option_keys
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 get_all_unindexed_postmeta_keys
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 get_all_taxonomies
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Configuration lists for Jetpack Search Fields
4 *
5 * Post Meta: list of post meta keys that are available in the index
6 *   and how they are configured.
7 *
8 * Custom Taxonomy: list of custom taxonomies that are indexed.
9 *
10 * The reason we need an allowed list is that Elasticsearch runs into scaling problems
11 * with more than 200k-ish total fields. The barrier to adding new fields is low,
12 * just open a PR.
13 *
14 * Although the comments indicate specific plugins, you don't need to be running
15 * that plugin for the indexing to work. The metakey just has to match.
16 *
17 * If you need a new meta key or taxonomy also consider using:
18 *   jetpack-search-meta0 - jetpack-search-meta9
19 *   jetpack-search-tag0 - jetpack-search-tag9
20 *
21 * @package automattic/jetpack-sync
22 */
23
24namespace Automattic\Jetpack\Sync\Modules;
25
26use Automattic\Jetpack\Search\AI_Answers;
27
28if ( ! defined( 'ABSPATH' ) ) {
29    exit( 0 );
30}
31
32/**
33 * Class to handle sync for Jetpack Search.
34 */
35class Search extends Module {
36
37    /**
38     * Sync module name.
39     *
40     * @access public
41     *
42     * @return string
43     */
44    public function name() {
45        return 'search';
46    }
47
48    /**
49     * Constructor.
50     */
51    public function __construct() {
52        // Post meta whitelists.
53        add_filter( 'jetpack_sync_post_meta_whitelist', array( $this, 'add_search_post_meta_whitelist' ), 10 );
54        // Add options
55        add_filter( 'jetpack_sync_options_whitelist', array( $this, 'add_search_options_whitelist' ), 10 );
56        // AI Answers CPTs and post meta (gated by feature flag).
57        add_filter( 'jetpack_sync_post_types_whitelist', array( $this, 'add_ai_answer_post_types' ), 10 );
58    }
59
60    /**
61     * Post meta search specification.
62     *
63     * We sync and index all meta keys in this list. Additionally there are a few
64     * options.
65     *
66     * 'metakey' => [ 'searchable_in_all_content' => true ],
67     *    Field will be included in the all_content fields
68     *
69     * 'metakey' => [ 'available' => false, 'alternatives' => [ 'metakey_processed' ] ],
70     *   Field not in meta.* but has data in an alternative field(s) name that
71     *   should work similarly. For instance, woocommerce total_sales does not go into
72     *   the index, but the percentage of sales does.
73     *
74     * @static
75     * @access private
76     * @var array
77     */
78    private static $postmeta_to_sync = array(
79        // jetpack.
80        '_guideline_block_jetpack_search-ai-summary' => array(), // AI Answers personality (Gutenberg Guidelines CPT).
81        'jetpack-search-meta0'                       => array( 'searchable_in_all_content' => true ),
82        'jetpack-search-meta1'                       => array( 'searchable_in_all_content' => true ),
83        'jetpack-search-meta2'                       => array( 'searchable_in_all_content' => true ),
84        'jetpack-search-meta3'                       => array( 'searchable_in_all_content' => true ),
85        'jetpack-search-meta4'                       => array( 'searchable_in_all_content' => true ),
86        'jetpack-search-meta5'                       => array( 'searchable_in_all_content' => true ),
87        'jetpack-search-meta6'                       => array( 'searchable_in_all_content' => true ),
88        'jetpack-search-meta7'                       => array( 'searchable_in_all_content' => true ),
89        'jetpack-search-meta8'                       => array( 'searchable_in_all_content' => true ),
90        'jetpack-search-meta9'                       => array( 'searchable_in_all_content' => true ),
91
92        // woocommerce.
93        'exclude_product_categories'                 => array(),
94        'exclude_product_ids'                        => array(),
95        'free_shipping'                              => array(),
96        'id_field'                                   => array(),
97        'individual_use'                             => array(),
98        'limit_usage_to_x_items'                     => array(),
99        'maximum_amount'                             => array(),
100        'minimum_amount'                             => array(),
101        'post_id'                                    => array(),
102        'product_categories'                         => array( 'searchable_in_all_content' => true ),
103        'product_ids'                                => array(),
104        'total_sales'                                => array(
105            'available'    => false,
106            'alternatives' => array(
107                'wc.percent_of_sales',
108            ),
109        ),
110        'usage_limit'                                => array(),
111        'usage_limit_per_user'                       => array(),
112        '_crosssell_ids'                             => array(),
113        '_downloadable'                              => array(),
114        '_featured'                                  => array(),
115        '_height'                                    => array(),
116        '_length'                                    => array(),
117        '_price'                                     => array(
118            'alternatives' => array(
119                'wc.price',
120                'wc.min_price',
121                'wc.max_price',
122            ),
123        ),
124        '_prices_include_tax'                        => array(),
125        '_product_attributes'                        => array(),
126        '_product_version'                           => array(),
127        '_regular_price'                             => array(
128            'alternatives' => array(
129                'wc.regular_price',
130            ),
131        ),
132        '_sale_price'                                => array(
133            'alternatives' => array(
134                'wc.sale_price',
135            ),
136        ),
137        '_sale_price_dates_from'                     => array(),
138        '_sale_price_dates_to'                       => array(),
139        '_sku'                                       => array( 'searchable_in_all_content' => true ),
140        '_stock_status'                              => array(),
141        '_wc_average_rating'                         => array(
142            'alternatives' => array(
143                'wc.ave_rating_score',
144            ),
145        ),
146        '_wc_rating_count'                           => array(
147            'alternatives' => array(
148                'wc.rating', // wc.rating.count_1, wc.rating.count_2, ...
149            ),
150        ),
151        '_wc_review_count'                           => array(),
152        '_weight'                                    => array(),
153        '_width'                                     => array(),
154
155        // co-authors plus.
156        'cap-description'                            => array( 'searchable_in_all_content' => true ),
157        'cap-user_login'                             => array( 'searchable_in_all_content' => true ),
158        'cap-user_email'                             => array(),
159        'cap-last_name'                              => array( 'searchable_in_all_content' => true ),
160        'cap-first_name'                             => array( 'searchable_in_all_content' => true ),
161        'cap-display_name'                           => array( 'searchable_in_all_content' => true ),
162        'cap-website'                                => array(),
163        'cap-jabber'                                 => array(),
164        'cap-aim'                                    => array(),
165        'cap-twitter'                                => array(),
166        'cap-facebook'                               => array(),
167        'cap-google_plus'                            => array(),
168        'cap-job_title'                              => array( 'searchable_in_all_content' => true ),
169
170        // bbpress.
171        'bbpl_like'                                  => array(),
172        'bbpress_discussion_comments_copied'         => array(),
173        'bbpress_discussion_tags_copied'             => array(),
174        'bbpress_discussion_topic_id'                => array(),
175        'bbpress_discussion_use_defaults'            => array(),
176        'bbpress_page_header_bg'                     => array(),
177        'bbpress_title_bg'                           => array(),
178        'use_bbpress_discussion_topic'               => array(),
179
180        // wpml.
181        'tm_meta_wpml'                               => array(),
182        'wpml_language'                              => array(),
183        'wpml_media_lang'                            => array(),
184        'wpml_media_processed'                       => array(),
185
186        // blogger import.
187        'blogger_author'                             => array( 'searchable_in_all_content' => true ),
188        'blogger_blog'                               => array( 'searchable_in_all_content' => true ),
189        'blogger_permalink'                          => array( 'searchable_in_all_content' => true ),
190
191        // geo.
192        'geo_address'                                => array( 'searchable_in_all_content' => true ),
193        'geo_latitude'                               => array(),
194        'geo_longitude'                              => array(),
195        'geo_public'                                 => array(),
196        'geolocated'                                 => array(),
197        'geolocation_city'                           => array( 'searchable_in_all_content' => true ),
198        'geolocation_country_long'                   => array( 'searchable_in_all_content' => true ),
199        'geolocation_country_short'                  => array( 'searchable_in_all_content' => true ),
200        'geolocation_formatted_address'              => array( 'searchable_in_all_content' => true ),
201        'geolocation_lat'                            => array(),
202        'geolocation_long'                           => array(),
203        'geolocation_postcode'                       => array( 'searchable_in_all_content' => true ),
204        'geolocation_state_long'                     => array( 'searchable_in_all_content' => true ),
205        'geolocation_state_short'                    => array( 'searchable_in_all_content' => true ),
206
207        // wp-ultimate-recipe.
208        'recipe_alternate_image'                     => array(),
209        'recipe_cook_time'                           => array(),
210        'recipe_cook_time_text'                      => array(),
211        'recipe_description'                         => array( 'searchable_in_all_content' => true ),
212        'recipe_ingredients'                         => array( 'searchable_in_all_content' => true ),
213        'recipe_instructions'                        => array( 'searchable_in_all_content' => true ),
214        'recipe_notes'                               => array( 'searchable_in_all_content' => true ),
215        'recipe_nutritional'                         => array( 'searchable_in_all_content' => true ),
216        'recipe_passive_time'                        => array(),
217        'recipe_passive_time_text'                   => array(),
218        'recipe_prep_time'                           => array(),
219        'recipe_prep_time_text'                      => array(),
220        'recipe_rating'                              => array(),
221        'recipe_servings'                            => array(),
222        'recipe_servings_normalized'                 => array(),
223        'recipe_servings_type'                       => array(),
224        'recipe_terms'                               => array( 'searchable_in_all_content' => true ),
225        'recipe_terms_with_parents'                  => array(),
226        'recipe_title'                               => array( 'searchable_in_all_content' => true ),
227        'recipe_user_ratings'                        => array(),
228        'recipe_user_ratings_rating'                 => array(),
229
230        // generic fields.
231        // from advanced-custom-fields and metabox.io .
232        'Link'                                       => array(),
233        'Location'                                   => array(),
234        'Title'                                      => array( 'searchable_in_all_content' => true ),
235        'ad_code'                                    => array(),
236        'address'                                    => array(),
237        'admin_mail'                                 => array(),
238        'admin_only'                                 => array(),
239        'advertisers'                                => array( 'searchable_in_all_content' => true ),
240        'age'                                        => array(),
241        'aliases'                                    => array(),
242        'alternate_title'                            => array(),
243        'ama_content'                                => array(),
244        'amazon'                                     => array(),
245        'answer'                                     => array( 'searchable_in_all_content' => true ),
246        'area'                                       => array(),
247        'attention'                                  => array(),
248        'attr'                                       => array(),
249        'author'                                     => array( 'searchable_in_all_content' => true ),
250        'author_name'                                => array( 'searchable_in_all_content' => true ),
251        'blog'                                       => array(),
252        'blog_id'                                    => array(),
253        'call_to_action'                             => array(),
254        'campaign_preview'                           => array(),
255        'canonical_url'                              => array(),
256        'catch_text'                                 => array(),
257        'category'                                   => array( 'searchable_in_all_content' => true ),
258        'classificacao'                              => array(),
259        'classification'                             => array(),
260        'code'                                       => array(),
261        'codigo'                                     => array(),
262        'company'                                    => array( 'searchable_in_all_content' => true ),
263        'company_website'                            => array(),
264        'config'                                     => array(),
265        'construction'                               => array(),
266        'container_ids'                              => array(),
267        'content'                                    => array( 'searchable_in_all_content' => true ),
268        'content_body-full_content'                  => array( 'searchable_in_all_content' => true ),
269        'copyright'                                  => array(),
270        'custom_page_title'                          => array( 'searchable_in_all_content' => true ),
271        'custom_permalink'                           => array(),
272        'customize'                                  => array(),
273        'data'                                       => array(),
274        'date'                                       => array(),
275        'day'                                        => array(),
276        'descripcion'                                => array( 'searchable_in_all_content' => true ),
277        'description'                                => array( 'searchable_in_all_content' => true ),
278        'display_settings'                           => array(),
279        'display_type'                               => array(),
280        'duration'                                   => array(),
281        'embed'                                      => array(),
282        'entity_ids'                                 => array(),
283        'entity_types'                               => array(),
284        'event_subtitle'                             => array( 'searchable_in_all_content' => true ),
285        'excluded_container_ids'                     => array(),
286        'exclusions'                                 => array(),
287        'experience'                                 => array(),
288        'external_url'                               => array(),
289        'featured'                                   => array(),
290        'featured_image'                             => array(),
291        'featured_post'                              => array(),
292        'featured_story'                             => array(),
293        'fee'                                        => array(),
294        'filter'                                     => array(),
295        'follow'                                     => array(),
296        'footer_text'                                => array(),
297        'from_header'                                => array(),
298        'fullscreen_view'                            => array(),
299        'gallery'                                    => array(),
300        'genre'                                      => array( 'searchable_in_all_content' => true ),
301        'guest_bio'                                  => array(),
302        'guest_name'                                 => array(),
303        'guests'                                     => array( 'searchable_in_all_content' => true ),
304        'has_variations'                             => array(),
305        'hashtag'                                    => array(),
306        'header_image'                               => array(),
307        'hidden_from_ui'                             => array(),
308        'hide_on_screen'                             => array(),
309        'homepage_order'                             => array(),
310        'hours'                                      => array(),
311        'i18n'                                       => array(),
312        'id'                                         => array(),
313        'image'                                      => array(),
314        'image_size'                                 => array(),
315        'image_source'                               => array(),
316        'index'                                      => array(),
317        'intro_text'                                 => array( 'searchable_in_all_content' => true ),
318        'job_mention'                                => array( 'searchable_in_all_content' => true ),
319        'keywords'                                   => array( 'searchable_in_all_content' => true ),
320        'latest_news'                                => array(),
321        'layout'                                     => array(),
322        'link'                                       => array(),
323        'link_dump'                                  => array( 'searchable_in_all_content' => true ),
324        'link_url'                                   => array(),
325        'location'                                   => array(),
326        'logo'                                       => array(),
327        'main_title'                                 => array( 'searchable_in_all_content' => true ),
328        'maximum_entity_count'                       => array(),
329        'media'                                      => array(),
330        'mentions'                                   => array(),
331        'messages'                                   => array(),
332        'meta_description'                           => array( 'searchable_in_all_content' => true ),
333        'meta_id'                                    => array(),
334        'meta_index'                                 => array(),
335        'meta_key'                                   => array(),
336        'meta_value'                                 => array(),
337        'modal-dialog-id'                            => array(),
338        'name'                                       => array( 'searchable_in_all_content' => true ),
339        'nombre'                                     => array( 'searchable_in_all_content' => true ),
340        'notes'                                      => array( 'searchable_in_all_content' => true ),
341        'options'                                    => array(),
342        'order_by'                                   => array(),
343        'order_direction'                            => array(),
344        'original_cats'                              => array(),
345        'original_headers'                           => array(),
346        'original_link'                              => array(),
347        'original_message'                           => array(),
348        'original_subject'                           => array(),
349        'original_title'                             => array(),
350        'original_to'                                => array(),
351        'other_setting'                              => array(),
352        'page_canonical'                             => array(),
353        'page_layout'                                => array(),
354        'page_sidebar'                               => array(),
355        'page_tags'                                  => array(),
356        'panels_data'                                => array(),
357        'parking'                                    => array(),
358        'pdf_upload'                                 => array(),
359        'people_mentioned'                           => array(),
360        'photo'                                      => array(),
361        'play_time'                                  => array(),
362        'position'                                   => array(),
363        'post-rating'                                => array(),
364        'post_background'                            => array(),
365        'post_color'                                 => array(),
366        'post_sidebar'                               => array(),
367        'post_subtitle'                              => array( 'searchable_in_all_content' => true ),
368        'price'                                      => array(),
369        'publication'                                => array(),
370        'rating'                                     => array(),
371        'ratings_average'                            => array(),
372        'ratings_score'                              => array(),
373        'ratings_users'                              => array(),
374        'relation'                                   => array(),
375        'reply_to_header'                            => array(),
376        'required'                                   => array(),
377        'returns'                                    => array(),
378        'review_post'                                => array(),
379        'rule'                                       => array(),
380        'section'                                    => array( 'searchable_in_all_content' => true ),
381        'selected_links'                             => array(),
382        'session_transcript'                         => array(),
383        'settings'                                   => array(),
384        'sex'                                        => array(),
385        'shares_count'                               => array(),
386        'show_description'                           => array( 'searchable_in_all_content' => true ),
387        'show_page_title'                            => array(),
388        'show_notes'                                 => array(),
389        'show_notes_preview'                         => array(),
390        'side'                                       => array(),
391        'sidebar'                                    => array(),
392        'site'                                       => array(),
393        'situation'                                  => array(),
394        'slide_template'                             => array(),
395        'slug'                                       => array(),
396        'sortorder'                                  => array(),
397        'source'                                     => array(),
398        'start_date'                                 => array(),
399        'status'                                     => array(),
400        'styles'                                     => array(),
401        'subtitle'                                   => array( 'searchable_in_all_content' => true ),
402        'subtitulo'                                  => array(),
403        'success'                                    => array(),
404        'summary'                                    => array( 'searchable_in_all_content' => true ),
405        'synopsis'                                   => array( 'searchable_in_all_content' => true ),
406        'tel'                                        => array(),
407        'tema'                                       => array(),
408        'testimonial'                                => array(),
409        'testimonial_author'                         => array(),
410        'text_already_subscribed'                    => array(),
411        'text_error'                                 => array(),
412        'text_invalid_email'                         => array(),
413        'text_not_subscribed'                        => array(),
414        'text_required_field_missing'                => array(),
415        'text_subscribed'                            => array(),
416        'text_unsubscribed'                          => array(),
417        'thumbnail'                                  => array(),
418        'time'                                       => array(),
419        'time_jump_list'                             => array( 'searchable_in_all_content' => true ),
420        'title'                                      => array( 'searchable_in_all_content' => true ),
421        'title_view'                                 => array(),
422        'titre'                                      => array( 'searchable_in_all_content' => true ),
423        'titulo'                                     => array( 'searchable_in_all_content' => true ),
424        'to_header'                                  => array(),
425        'toc'                                        => array(),
426        'transcript'                                 => array( 'searchable_in_all_content' => true ),
427        'transport_uri'                              => array(),
428        'type'                                       => array(),
429        'url'                                        => array(),
430        'validation'                                 => array(),
431        'value'                                      => array(),
432        'values'                                     => array(),
433        'variation'                                  => array(),
434        'video'                                      => array(),
435        'video_type'                                 => array(),
436        'video_url'                                  => array(),
437        'videopress_guid'                            => array(),
438        'website'                                    => array(),
439        'weight'                                     => array(),
440        'year'                                       => array(),
441
442        // wp.com martketplace search - @see https://wp.me/pdh6GB-Ax#comment-2104
443        '_app_icon'                                  => array(),
444        '_featured_product_video'                    => array(),
445        'wpcom_marketplace_org_slug'                 => array(),
446        '_wc_general_product_dependency_theme'       => array(),
447        '_wc_general_product_dependency_plugin'      => array(),
448        'wpcom_marketplace_product_extra_fields'     => array(),
449        'wccom_product_search_keywords'              => array( 'searchable_in_all_content' => true ),
450        '_wccom_product_faqs'                        => array( 'searchable_in_all_content' => true ),
451        'wccom_product_features'                     => array( 'searchable_in_all_content' => true ),
452        'wccom_product_compatibility'                => array( 'searchable_in_all_content' => true ),
453
454    ); // end indexed post meta.
455
456    /**
457     * Postmeta being considered for indexing
458     *   but currently not in the index
459     *   this list is really only for documentation.
460     *
461     * @static
462     * @access private
463     * @var array
464     */
465    private static $unindexed_postmeta = array(
466
467        // Core.
468        '_wp_attached_file'                          => array(),
469        '_wp_attachment_context'                     => array(),
470        '_wp_attachment_image_alt'                   => array(),
471        '_wp_attachment_is_custom_header'            => array(),
472        '_wp_attachment_metadata'                    => array(),
473        '_wp_desired_post_slug'                      => array(),
474        '_wp_old_date'                               => array(),
475        '_wp_old_slug'                               => array(),
476        '_wp_page_template'                          => array(),
477
478        // WooCommerce products.
479        // See https://github.com/woocommerce/woocommerce/blob/8ed6e7436ff87c2153ed30edd83c1ab8abbdd3e9/includes/data-stores/class-wc-product-data-store-cpt.php#L21 .
480        '_backorders'                                => array(),
481        '_default_attributes'                        => array(),
482        '_download_expiry'                           => array(),
483        '_download_limit'                            => array(),
484        '_download_permissions_granted'              => array(),
485        '_downloadable_files'                        => array(),
486        '_file_paths'                                => array(),
487        '_manage_stock'                              => array(),
488        '_product_image_gallery'                     => array(),
489        '_purchase_note'                             => array(),
490        '_recorded_sales'                            => array(),
491        '_sold_individually'                         => array(),
492        '_stock'                                     => array(),
493        '_tax_class'                                 => array(),
494        '_tax_status'                                => array(),
495        '_thumbnail_id'                              => array(),
496        '_upsell_ids'                                => array(),
497        '_variation_description'                     => array(),
498        '_virtual'                                   => array(),
499        '_visibility'                                => array(),
500        'coupon_amount'                              => array(),
501        'default_source'                             => array(),
502        'discount_type'                              => array(),
503        'exclude_sale_items'                         => array(),
504        'expiry_date'                                => array(),
505
506        // Woocommerce orders and refunds.
507        // See https://github.com/woocommerce/woocommerce/blob/8ed6e7436ff87c2153ed30edd83c1ab8abbdd3e9/includes/data-stores/class-wc-order-data-store-cpt.php#L27 .
508        // See https://github.com/woocommerce/woocommerce/blob/b8a2815ae546c836467008739e7ff5150cb08e93/includes/data-stores/class-wc-order-refund-data-store-cpt.php#L20 .
509        '_billing_address_1'                         => array(),
510        '_billing_address_2'                         => array(),
511        '_billing_address_index'                     => array(),
512        '_billing_city'                              => array(),
513        '_billing_company'                           => array(),
514        '_billing_country'                           => array(),
515        '_billing_email'                             => array(),
516        '_billing_first_name'                        => array(),
517        '_billing_last_name'                         => array(),
518        '_billing_phone'                             => array(),
519        '_billing_postcode'                          => array(),
520        '_billing_state'                             => array(),
521        '_cart_discount'                             => array(),
522        '_cart_discount_tax'                         => array(),
523        '_completed_date'                            => array(),
524        '_created_via'                               => array(),
525        '_customer_ip_address'                       => array(),
526        '_customer_user_agent'                       => array(),
527        '_date_completed'                            => array(),
528        '_date_paid'                                 => array(),
529        '_order_currency'                            => array(),
530        '_order_key'                                 => array(),
531        '_order_shipping'                            => array(),
532        '_order_shipping_tax'                        => array(),
533        '_order_stock_reduced'                       => array(),
534        '_order_tax'                                 => array(),
535        '_order_total'                               => array(),
536        '_order_version'                             => array(),
537        '_paid_date'                                 => array(),
538        '_payment_method'                            => array(),
539        '_payment_method_title'                      => array(),
540        '_payment_tokens'                            => array(),
541        '_recorded_coupon_usage_counts'              => array(),
542        '_refund_amount'                             => array(),
543        '_refund_reason'                             => array(),
544        '_refunded_by'                               => array(),
545        '_shipping_address_1'                        => array(),
546        '_shipping_address_2'                        => array(),
547        '_shipping_address_index'                    => array(),
548        '_shipping_city'                             => array(),
549        '_shipping_company'                          => array(),
550        '_shipping_country'                          => array(),
551        '_shipping_first_name'                       => array(),
552        '_shipping_last_name'                        => array(),
553        '_shipping_postcode'                         => array(),
554        '_shipping_state'                            => array(),
555        '_transaction_id'                            => array(),
556
557        // aioseop.
558        '_aioseop_description'                       => array(),
559        '_aioseop_keywords'                          => array(),
560        '_aioseop_title'                             => array(),
561
562        // yoast.
563        '_yoast_wpseo_authorship'                    => array(),
564        '_yoast_wpseo_bctitle'                       => array(),
565        '_yoast_wpseo_canonical'                     => array(),
566        '_yoast_wpseo_content_score'                 => array(),
567        '_yoast_wpseo_focuskw'                       => array(),
568        '_yoast_wpseo_focuskw_text_input'            => array(),
569        '_yoast_wpseo_google-plus-description'       => array(),
570        '_yoast_wpseo_google-plus-image'             => array(),
571        '_yoast_wpseo_linkdex'                       => array(),
572        '_yoast_wpseo_meta-robots-adv'               => array(),
573        '_yoast_wpseo_meta-robots-nofollow'          => array(),
574        '_yoast_wpseo_meta-robots-noindex'           => array(),
575        '_yoast_wpseo_metadesc'                      => array(),
576        '_yoast_wpseo_metakeywords'                  => array(),
577        '_yoast_wpseo_opengraph-description'         => array(),
578        '_yoast_wpseo_opengraph-image'               => array(),
579        '_yoast_wpseo_opengraph-title'               => array(),
580        '_yoast_wpseo_primary_byline'                => array(),
581        '_yoast_wpseo_primary_category'              => array(),
582        '_yoast_wpseo_primary_product_cat'           => array(),
583        '_yoast_wpseo_primary_sponsor-type'          => array(),
584        '_yoast_wpseo_primary_tema_category'         => array(),
585        '_yoast_wpseo_primary_wpdmcategory'          => array(),
586        '_yoast_wpseo_primary_wt_portfolio_category' => array(),
587        '_yoast_wpseo_redirect'                      => array(),
588        '_yoast_wpseo_sitemap-include'               => array(),
589        '_yoast_wpseo_sitemap-prio'                  => array(),
590        '_yoast_wpseo_title'                         => array(),
591        '_yoast_wpseo_twitter-description'           => array(),
592        '_yoast_wpseo_twitter-image'                 => array(),
593
594        // bbpress.
595        'bbppu_read_by'                              => array(),
596        '_bbp_activity_id'                           => array(),
597        '_bbp_attachment'                            => array(),
598        '_bbp_attachment_upload_error'               => array(),
599        '_bbp_forum_id'                              => array(),
600        '_bbp_forum_parent_id'                       => array(),
601        '_bbp_forum_subforum_count'                  => array(),
602        '_bbp_forum_type'                            => array(),
603        '_bbp_group_ids'                             => array(),
604        '_bbp_last_active_id'                        => array(),
605        '_bbp_last_active_time'                      => array(),
606        '_bbp_last_reply_id'                         => array(),
607        '_bbp_last_topic_id'                         => array(),
608        '_bbp_old_forum_id'                          => array(),
609        '_bbp_old_sticky_status'                     => array(),
610        '_bbp_old_topic_id'                          => array(),
611        '_bbp_post_id'                               => array(),
612        '_bbp_reply_count'                           => array(),
613        '_bbp_reply_is_private'                      => array(),
614        '_bbp_reply_to'                              => array(),
615        '_bbp_revision_log'                          => array(),
616        '_bbp_status'                                => array(),
617        '_bbp_sticky_topics'                         => array(),
618        '_bbp_topic_count'                           => array(),
619        '_bbp_topic_id'                              => array(),
620        '_bbp_total_reply_count'                     => array(),
621        '_bbp_total_topic_count'                     => array(),
622        '_bbp_voice_count'                           => array(),
623
624        // ???
625        '_locale'                                    => array(),
626
627        // wp-job-manager.
628        '_job_title'                                 => array(),
629        '_job_description'                           => array(),
630
631        // wpml.
632        '_wpml_media_duplicate'                      => array(),
633        '_wpml_media_featured'                       => array(),
634
635        // generic fields.
636        'ad_clicks_count'                            => array(),
637        'email'                                      => array(),
638        'usage_count'                                => array(),
639        'user_mail'                                  => array(),
640        'views'                                      => array(),
641        '_EventAllDay'                               => array(),
642        '_EventCost'                                 => array(),
643        '_EventCurrencyPosition'                     => array(),
644        '_EventCurrencySymbol'                       => array(),
645        '_EventDuration'                             => array(),
646        '_EventEndDate'                              => array(),
647        '_EventEndDateUTC'                           => array(),
648        '_EventOrganizerID'                          => array(),
649        '_EventOrigin'                               => array(),
650        '_EventShowMap'                              => array(),
651        '_EventShowMapLink'                          => array(),
652        '_EventStartDate'                            => array(),
653        '_EventStartDateUTC'                         => array(),
654        '_EventTimezone'                             => array(),
655        '_EventTimezoneAbbr'                         => array(),
656        '_EventURL'                                  => array(),
657        '_EventVenueID'                              => array(),
658        '_OrganizerEmail'                            => array(),
659        '_OrganizerOrganizer'                        => array(),
660        '_OrganizerOrigin'                           => array(),
661        '_OrganizerPhone'                            => array(),
662        '_OrganizerWebsite'                          => array(),
663        '_VenueAddress'                              => array(),
664        '_VenueCity'                                 => array(),
665        '_VenueCountry'                              => array(),
666        '_VenueOrigin'                               => array(),
667        '_VenuePhone'                                => array(),
668        '_VenueProvince'                             => array(),
669        '_VenueShowMap'                              => array(),
670        '_VenueShowMapLink'                          => array(),
671        '_VenueState'                                => array(),
672        '_VenueStateProvince'                        => array(),
673        '_VenueURL'                                  => array(),
674        '_VenueVenue'                                => array(),
675        '_VenueVenueID'                              => array(),
676        '_VenueZip'                                  => array(),
677        '_description'                               => array(),
678        '_edit_last'                                 => array(),
679        '_feedback_all_fields'                       => array(),
680        '_feedback_author'                           => array(),
681        '_feedback_author_email'                     => array(),
682        '_feedback_author_url'                       => array(),
683        '_feedback_contact_form_url'                 => array(),
684        '_feedback_ip'                               => array(),
685        '_feedback_subject'                          => array(),
686        '_layout'                                    => array(),
687        '_links_to'                                  => array(),
688        '_links_to_target'                           => array(),
689        '_mail'                                      => array(),
690        '_mail_2'                                    => array(),
691        '_messages'                                  => array(),
692        '_numero'                                    => array(),
693        '_post_restored_from'                        => array(),
694        '_video_url'                                 => array(),
695        '_website'                                   => array(),
696
697    ); // end unindexed post meta.
698
699    /**
700     * List of indexed taxonomy slugs - VARCHAR(32)
701     *
702     * @access private
703     * @static
704     *
705     * @var array
706     */
707    private static $taxonomies_to_sync = array(
708
709        // Core.
710        'link_category',
711        'nav_menu',
712        'post_format', // Special, limited to certain values.
713
714        // bbpress.
715        'topic',
716        'topic-tag',
717        'topics',
718
719        // buddypress.
720        'bp-email-type',
721        'bp-email-type',
722        'bp_docs_access',
723        'bp_docs_associated_item',
724        'bp_docs_comment_access',
725        'bp_docs_doc_in_folder',
726        'bp_docs_folder_in_group',
727        'bp_docs_tag',
728        'bp_member_type',
729
730        // co-authors plus.
731        'author',
732
733        // events calendar plus.
734        // the events calendar.
735        'event-categories',
736        'event-category',
737        'event-tag',
738        'event-tags',
739        'event-type',
740        'event-venue',
741        'event_category',
742        'event_location',
743        'event_organizer',
744        'event_tag',
745        'event_type',
746        'event_type_2',
747        'event_users',
748        'events_categories',
749        'events_category',
750        'events_feeds',
751        'events_tags',
752        'tribe_events_cat',
753
754        // jetpack.
755        'jetpack-portfolio-tag',
756        'jetpack-portfolio-type',
757        'jetpack-search-tag0',
758        'jetpack-search-tag1',
759        'jetpack-search-tag2',
760        'jetpack-search-tag3',
761        'jetpack-search-tag4',
762        'jetpack-search-tag5',
763        'jetpack-search-tag6',
764        'jetpack-search-tag7',
765        'jetpack-search-tag8',
766        'jetpack-search-tag9',
767
768        // nextgen gallery.
769        'ngg_tag',
770
771        // polylang.
772        // wpml.
773        'language',
774        'post_translations',
775        'term_language',
776        'term_translations',
777        'translation_priority',
778
779        // woocommerce.
780        'documentation_category',
781        'pa_accessory-type',
782        'pa_actor',
783        'pa_age',
784        'pa_ambulance',
785        'pa_amount',
786        'pa_arm-roll',
787        'pa_aspectratio',
788        'pa_audiencerating',
789        'pa_author',
790        'pa_axle',
791        'pa_battery',
792        'pa_belakang',
793        'pa_binding',
794        'pa_body-type',
795        'pa_bore-x-stroke-mm',
796        'pa_box-cargo',
797        'pa_brakes',
798        'pa_brand',
799        'pa_brands',
800        'pa_bus',
801        'pa_c',
802        'pa_cabin-to-end',
803        'pa_capacity',
804        'pa_catalognumberlist',
805        'pa_ce-keurmerk',
806        'pa_chassis-front',
807        'pa_chassis-rear',
808        'pa_chassis-weight-kg',
809        'pa_chip-log',
810        'pa_clothing-size',
811        'pa_clutch',
812        'pa_clutch-type',
813        'pa_collection',
814        'pa_color',
815        'pa_colors',
816        'pa_colour',
817        'pa_compactor',
818        'pa_condition',
819        'pa_conditions-options',
820        'pa_cor',
821        'pa_couleur',
822        'pa_country',
823        'pa_countryregion-of-manufacture',
824        'pa_crane',
825        'pa_creator',
826        'pa_culoare',
827        'pa_customerpackagetype',
828        'pa_depan',
829        'pa_depan-belakang',
830        'pa_department',
831        'pa_design',
832        'pa_diameter',
833        'pa_diameter-cakram',
834        'pa_dimension-mm',
835        'pa_dimensions',
836        'pa_director',
837        'pa_disc-diameter',
838        'pa_drive-system',
839        'pa_dump',
840        'pa_ean',
841        'pa_eanlist',
842        'pa_edition',
843        'pa_electric-battery',
844        'pa_engine-model',
845        'pa_engine-size',
846        'pa_ethnicity',
847        'pa_exhaust-brake',
848        'pa_fabric',
849        'pa_farbe',
850        'pa_farg',
851        'pa_farge',
852        'pa_features',
853        'pa_final-gear-ratio',
854        'pa_finish',
855        'pa_fire-fighting',
856        'pa_fits',
857        'pa_flat-bed',
858        'pa_flavour',
859        'pa_format',
860        'pa_fragrance',
861        'pa_frame',
862        'pa_front',
863        'pa_front-overhang',
864        'pa_front-rear',
865        'pa_front-tread',
866        'pa_fuel-tank',
867        'pa_fuel-type',
868        'pa_garantie',
869        'pa_geadviseerd-accu-type',
870        'pa_gear-ratio',
871        'pa_gender',
872        'pa_genre',
873        'pa_gewicht-exclusief-accu',
874        'pa_gift-card-amount',
875        'pa_grade-ability-tan-o',
876        'pa_groesse',
877        'pa_gtin',
878        'pa_gvwr-gcwr',
879        'pa_hardwareplatform',
880        'pa_hazardousmaterialtype',
881        'pa_height',
882        'pa_hekmotor-of-boegmotor',
883        'pa_helmet-size',
884        'pa_hersteller',
885        'pa_high-blow-tank',
886        'pa_hoehe',
887        'pa_inhoud',
888        'pa_interchange-part-number',
889        'pa_isadultproduct',
890        'pa_isbn',
891        'pa_iseligiblefortradein',
892        'pa_itemdimensions',
893        'pa_itempartnumber',
894        'pa_kemudi-tipe',
895        'pa_kleur',
896        'pa_kopling-tipe',
897        'pa_label',
898        'pa_languages',
899        'pa_lbs',
900        'pa_legaldisclaimer',
901        'pa_lengte-aansluitkabel',
902        'pa_length',
903        'pa_liquid-tank',
904        'pa_location',
905        'pa_losse-motor-complete-set',
906        'pa_maat',
907        'pa_main-brake',
908        'pa_make',
909        'pa_manufacturer',
910        'pa_manufacturer-part-number',
911        'pa_manufacturermaximumage',
912        'pa_manufacturerminimumage',
913        'pa_manufacturerpartswarrantydesc',
914        'pa_masseinheit',
915        'pa_material',
916        'pa_mau-sac',
917        'pa_maximum-power-ps-rpm',
918        'pa_maximum-speed',
919        'pa_maximum-torque-kgm-rpm',
920        'pa_mediatype',
921        'pa_megethos',
922        'pa_merk',
923        'pa_metal-type',
924        'pa_min-turning-circle',
925        'pa_mixer',
926        'pa_model',
927        'pa_model-tipe',
928        'pa_model-type',
929        'pa_modelo',
930        'pa_mount',
931        'pa_mpn',
932        'pa_nicotine-strength',
933        'pa_nos-of-cylinder',
934        'pa_nos-of-tire',
935        'pa_numberofdiscs',
936        'pa_numberofitems',
937        'pa_numberofpages',
938        'pa_offset',
939        'pa_open-cargo',
940        'pa_operatingsystem',
941        'pa_options',
942        'pa_other-part-number',
943        'pa_overall-height',
944        'pa_overall-length',
945        'pa_overall-width',
946        'pa_overview',
947        'pa_packagedimensions',
948        'pa_packagequantity',
949        'pa_pages',
950        'pa_parking-brake',
951        'pa_part-number',
952        'pa_partnumber',
953        'pa_pattern',
954        'pa_pattern2',
955        'pa_performa',
956        'pa_pictureformat',
957        'pa_pin-size',
958        'pa_piston-displacement-cc',
959        'pa_ploshhad',
960        'pa_plug-type',
961        'pa_power',
962        'pa_product',
963        'pa_productgroup',
964        'pa_producttypename',
965        'pa_publicationdate',
966        'pa_publisher',
967        'pa_quantity',
968        'pa_rear',
969        'pa_rear-overhang',
970        'pa_rear-tread',
971        'pa_refrigerated-box',
972        'pa_region',
973        'pa_regioncode',
974        'pa_releasedate',
975        'pa_rem-parkir',
976        'pa_rem-pelambat',
977        'pa_rem-utama',
978        'pa_reverse',
979        'pa_runningtime',
980        'pa_scent',
981        'pa_schachtlengte',
982        'pa_seeds',
983        'pa_series',
984        'pa_setting',
985        'pa_sex',
986        'pa_shape',
987        'pa_shirt-size',
988        'pa_size',
989        'pa_sizes',
990        'pa_sku',
991        'pa_sky-lift',
992        'pa_sleeve-length',
993        'pa_snelheidsregeling',
994        'pa_staart',
995        'pa_steering',
996        'pa_steering-type',
997        'pa_storlek',
998        'pa_studio',
999        'pa_stuwkracht-lbs',
1000        'pa_style',
1001        'pa_suspensions',
1002        'pa_taille',
1003        'pa_talla',
1004        'pa_tamanho',
1005        'pa_tamano',
1006        'pa_taxi',
1007        'pa_ticket-type',
1008        'pa_tire-size',
1009        'pa_total-chassis-weight',
1010        'pa_towing-truck',
1011        'pa_tradeinvalue',
1012        'pa_trailer-t-head',
1013        'pa_transmisi-tipe',
1014        'pa_transmission',
1015        'pa_transmission-type',
1016        'pa_types',
1017        'pa_ukuran',
1018        'pa_upc',
1019        'pa_upclist',
1020        'pa_variation',
1021        'pa_vehicle-carrier',
1022        'pa_vergelijkbaar-stuwkracht',
1023        'pa_vermogen',
1024        'pa_voltage',
1025        'pa_volume',
1026        'pa_warranty',
1027        'pa_weight',
1028        'pa_wheel-base',
1029        'pa_wheel-configuration',
1030        'pa_wheel-disc-size',
1031        'pa_width',
1032        'pa_zout-water-geschikt',
1033        'product',
1034        'product-brand',
1035        'product_brand',
1036        'product-category',
1037        'product_cat',
1038        'product_delivery_time',
1039        'product_delivery_times',
1040        'product_price_label',
1041        'product_sale_labels',
1042        'product_shipping_class',
1043        'product_tag',
1044        'product_type',
1045        'product_unit',
1046        'product_visibility',
1047        'products',
1048
1049        // wp-job-manager.
1050        'job-category',
1051        'job-location',
1052        'job-type',
1053        'job_cat',
1054        'job_category',
1055        'job_listing_category',
1056        'job_listing_label',
1057        'job_listing_region',
1058        'job_listing_tag',
1059        'job_listing_type',
1060        'job_salary',
1061        'job_tag',
1062        'job_type',
1063        'jobman_category',
1064        'jobpost_category',
1065        'jobpost_job_type',
1066        'jobpost_location',
1067        'resume_category',
1068        'resume_groups',
1069        'resume_job_type',
1070        'resume_job_type',
1071        'resume_languages',
1072        'resume_region',
1073        'resume_skill',
1074        'resume_specialities',
1075
1076        // generic.
1077        '_resource',
1078        'acadp_categories',
1079        'acadp_locations',
1080        'action-group',
1081        'activity',
1082        'actor',
1083        'actors',
1084        'ad-group',
1085        'adace-ad-group',
1086        'adace-sponsor',
1087        'additional_features',
1088        'adv_location',
1089        'advanced_ads_groups',
1090        'advert_category',
1091        'affcoups_coupon_category',
1092        'affcoups_coupon_type',
1093        'ai_log_context',
1094        'ai_log_level',
1095        'al_product-cat',
1096        'aol_ad_category',
1097        'aol_ad_location',
1098        'aol_ad_type',
1099        'aol_application_status',
1100        'area',
1101        'article-slug',
1102        'asgarosforum-category',
1103        'asgarosforum-usergroup',
1104        'attachment_category',
1105        'attachment_tag',
1106        'atum_location',
1107        'audience_type',
1108        'avhec_catgroup',
1109        'bartype',
1110        'baths',
1111        'beds',
1112        'bepro_listing_types',
1113        'blog_category',
1114        'booked_custom_calendars',
1115        'brand',
1116        'brands',
1117        'business',
1118        'business_cat',
1119        'business_category',
1120        'bwg_tag',
1121        'byline',
1122        'calendar_category',
1123        'calendar_feed',
1124        'calendar_type',
1125        'campaign_category',
1126        'campaign_tag',
1127        'carousel_cat',
1128        'carousels_category',
1129        'case27_job_listing_tags',
1130        'categories',
1131        'category_media',
1132        'category_portfolio',
1133        'celebrity_cat',
1134        'chapters',
1135        'chronosly_category',
1136        'city',
1137        'classified_listing_type',
1138        'client-types',
1139        'clients_groups',
1140        'cm-business-category',
1141        'cmdm_category',
1142        'cn_log_type',
1143        'coderevolution_post_source',
1144        'collection',
1145        'community',
1146        'companies',
1147        'company',
1148        'cont_category',
1149        'content_audit',
1150        'country',
1151        'course',
1152        'course-cat',
1153        'course-category',
1154        'course_cat',
1155        'course_category',
1156        'course_difficulty',
1157        'course_tag',
1158        'courses_type',
1159        'cp_campaign',
1160        'cp_recipe_category',
1161        'csco_post_featured',
1162        'ct_status',
1163        'ctl-stories',
1164        'cuisine',
1165        'dc_vendor_shop',
1166        'ddownload_category',
1167        'ddownload_tag',
1168        'dealstore',
1169        'department',
1170        'departments',
1171        'department-company',
1172        'developed-by',
1173        'dfads_group',
1174        'dgfw_gift_categories',
1175        'director',
1176        'district',
1177        'dlm_download_category',
1178        'dlm_download_tag',
1179        'doc_tag',
1180        'document-category',
1181        'document-type',
1182        'download_artist',
1183        'download_category',
1184        'download_tag',
1185        'downloads_filter',
1186        'dps_book',
1187        'dt_gallery_category',
1188        'dt_logos_category',
1189        'dt_portfolio_category',
1190        'dt_team_category',
1191        'dt_testimonials_category',
1192        'dtcast',
1193        'dtcreator',
1194        'dtdirector',
1195        'dtnetworks',
1196        'dtstudio',
1197        'dtyear',
1198        'dvteamtaxonomy',
1199        'dwqa-question_category',
1200        'dwqa-question_tag',
1201        'eafl_category',
1202        'easy-testimonial-category',
1203        'ecwd_event_category',
1204        'edd_log_type',
1205        'edition',
1206        'ef_editorial_meta',
1207        'ef_usergroup',
1208        'element_category',
1209        'elementor_library_type',
1210        'employees_category',
1211        'encyclopedia-tag',
1212        'envira-tag',
1213        'epkb_post_type_1_category',
1214        'espresso_event_categories',
1215        'espresso_event_type',
1216        'essential_grid_category',
1217        'et_post_format',
1218        'faq-group',
1219        'faq-tags',
1220        'faq-topic',
1221        'faq_cat',
1222        'faq_categories',
1223        'faq_category',
1224        'faqs-category',
1225        'fdm-menu-section',
1226        'feature',
1227        'featured_item_category',
1228        'featured_item_tag',
1229        'feedback_type',
1230        'feeds',
1231        'fl-builder-template-type',
1232        'flamingo_inbound_channel',
1233        'follow_up_email_campaign',
1234        'follow_up_email_type',
1235        'following_users',
1236        'football-team-taxo',
1237        'fpd_design_category',
1238        'gallery-category',
1239        'gallery_cat',
1240        'gallery_categories',
1241        'gallery_category',
1242        'gallery_entries',
1243        'gallerycat',
1244        'gd_event_tags',
1245        'gd_eventcategory',
1246        'gd_place_tags',
1247        'gd_placecategory',
1248        'genre',
1249        'genres',
1250        'gg_connect_hub',
1251        'give_log_type',
1252        'gn-genre',
1253        'gn-location-1',
1254        'gn-location-2',
1255        'gn-location-3',
1256        'gp_hubs',
1257        'gp_portfolios',
1258        'gp_videos',
1259        'group',
1260        'group-documents-category',
1261        'groups',
1262        'guest',
1263        'hashtags',
1264        'hotel_facility',
1265        'ia_invited_groups',
1266        'ia_invitees',
1267        'incsub_wiki_category',
1268        'industry',
1269        'ingredient',
1270        'insight-type',
1271        'issue',
1272        'issuem_issue',
1273        'issuem_issue_tags',
1274        'jbp_category',
1275        'karma-slider-category',
1276        'klaviyo_shop_cart_status',
1277        'kwlogos-carousel',
1278        'layout_category',
1279        'layout_type',
1280        'ld_course_category',
1281        'ld_course_tag',
1282        'ld_lesson_category',
1283        'ld_lesson_tag',
1284        'ld_topic_tag',
1285        'lesson-tag',
1286        'level',
1287        'lingotek_hash',
1288        'lingotek_profile',
1289        'link_library_category',
1290        'linkage',
1291        'list-tags',
1292        'listing-category',
1293        'listing_amenities',
1294        'listing_category',
1295        'liveblog',
1296        'llms_access_plan_visibility',
1297        'llms_product_visibility',
1298        'localisation',
1299        'location',
1300        'location-tag',
1301        'locations',
1302        'magazine',
1303        'map_location_categories',
1304        'masonry_gallery_category',
1305        'mc-event-category',
1306        'mec_category',
1307        'mec_location',
1308        'mec_organizer',
1309        'media-category',
1310        'media-tags',
1311        'media_category',
1312        'media_folder',
1313        'member_cat',
1314        'mentions',
1315        'mesh_template_types',
1316        'ml-slider',
1317        'module',
1318        'module-tag',
1319        'module_width',
1320        'movie_cat',
1321        'mpp-component',
1322        'mpp-status',
1323        'mpp-type',
1324        'muvicast',
1325        'muvicountry',
1326        'muvidirector',
1327        'muviindex',
1328        'muviquality',
1329        'muviyear',
1330        'news-category',
1331        'news-tag',
1332        'news-type',
1333        'news_type_cat',
1334        'news_category',
1335        'nova_menu',
1336        'nova_menu_item_label',
1337        'offer-types',
1338        'organization',
1339        'our_team_category',
1340        'page_category',
1341        'page_condition',
1342        'parisrestaurant',
1343        'parissauna',
1344        'partner_category',
1345        'partners',
1346        'paswdestinatari',
1347        'paypal_ipn_type',
1348        'pdf_lv_tag',
1349        'pec_events_category',
1350        'people',
1351        'people-department',
1352        'people-expertise',
1353        'people-location',
1354        'perfect_quotes_category',
1355        'performer',
1356        'person',
1357        'personnal-category',
1358        'pexcontentslider_category',
1359        'pexfullslider_category',
1360        'pexnivoslider_category',
1361        'pexpricing_category',
1362        'pexservice_category',
1363        'pextestimonial_category',
1364        'pf_feed_item_tag',
1365        'pg_sas_type',
1366        'photo_tag',
1367        'phototype',
1368        'pj-categs',
1369        'pj-tags',
1370        'pl-categs',
1371        'placement',
1372        'plan_status',
1373        'platform',
1374        'player',
1375        'plugins_categories',
1376        'podcast',
1377        'pojo_sidebars',
1378        'popup_category',
1379        'pornstars',
1380        'portada',
1381        'portcat',
1382        'portfolio-category',
1383        'portfolio-gallery',
1384        'portfolio-status',
1385        'portfolio-skills',
1386        'portfolio-tag',
1387        'portfolio-tags',
1388        'portfolio-type',
1389        'portfolio-types',
1390        'portfolio_cat',
1391        'portfolio_categories',
1392        'portfolio_category',
1393        'portfolio_cats',
1394        'portfolio_client',
1395        'portfolio_entries',
1396        'portfolio_filter',
1397        'portfolio_in',
1398        'portfolio_label',
1399        'portfolio_skills',
1400        'portfolio_tag',
1401        'portfolio_tags',
1402        'portfolio_type',
1403        'posicao',
1404        'post-type',
1405        'post_format',
1406        'post_series',
1407        'pp_editorial_meta',
1408        'pp_notify_role',
1409        'pp_usergroup',
1410        'pricingcats',
1411        'print_section',
1412        'print_status',
1413        'product_asset_class',
1414        'product_name',
1415        'programs',
1416        'project-attributes',
1417        'project-cat',
1418        'project-category',
1419        'project-type',
1420        'project_category',
1421        'project_collection',
1422        'project_tag',
1423        'projects_category',
1424        'projects_tag',
1425        'prominence',
1426        'promotion-categories',
1427        'property-city',
1428        'property-feature',
1429        'property-status',
1430        'property-type',
1431        'property-types',
1432        'property_action_category',
1433        'property_area',
1434        'property_category',
1435        'property_city',
1436        'property_feature',
1437        'property_status',
1438        'property_type',
1439        'province',
1440        'provinces',
1441        'publisher',
1442        'pwb-brand',
1443        'qmn_log_type',
1444        'qualification',
1445        'qualifications',
1446        'quality',
1447        'question-category',
1448        'question-tag',
1449        'question-type',
1450        'question_cat',
1451        'question_category',
1452        'question_tag',
1453        'quiz',
1454        'quiz-type',
1455        'quote_status',
1456        'rating',
1457        'reaction',
1458        'recipe-category',
1459        'recipe_category',
1460        'recipe_type',
1461        'region',
1462        'registrant-event',
1463        'related_keywords',
1464        'release-date',
1465        'resource-type',
1466        'resource_category',
1467        'resource_type',
1468        'resourcetype',
1469        'review-type',
1470        'review_category',
1471        'rodzaj',
1472        'role',
1473        'room_category',
1474        'room_tag',
1475        'roomtype',
1476        'rubriek_categorie',
1477        'savedreply',
1478        'schools',
1479        'scope',
1480        'scores_cat',
1481        'sdm_categories',
1482        'sdm_tags',
1483        'season',
1484        'secondary_html_features',
1485        'section',
1486        'sector',
1487        'series',
1488        'series_of_posts',
1489        'services_group',
1490        'serving',
1491        'shop_cart_status',
1492        'shop_cat',
1493        'shop_order_status',
1494        'shop_vendor',
1495        'shop_warranty_status',
1496        'shopp_category',
1497        'shopr_category',
1498        'show',
1499        'simple_link_category',
1500        'site-review-category',
1501        'sizes',
1502        'skill',
1503        'skill_level',
1504        'skills',
1505        'sld_cat',
1506        'slide-page',
1507        'slide-types',
1508        'slide_categories',
1509        'slide_type',
1510        'slider',
1511        'slider-locations',
1512        'slider_category',
1513        'slides_category',
1514        'slideshow',
1515        'sm-category',
1516        'snax_format',
1517        'sngg_media_tags',
1518        'solution_channel',
1519        'source_domain',
1520        'source_id',
1521        'sp_league',
1522        'sp_position',
1523        'sp_role',
1524        'sp_season',
1525        'sp_venue',
1526        'speaker',
1527        'speakers',
1528        'special-feature',
1529        'specialty',
1530        'spnl_log_type',
1531        'sponsor_categories',
1532        'sponsor_category',
1533        'sponsor_type',
1534        'spot_tag',
1535        'st_af_category',
1536        'st_af_tags',
1537        'staff',
1538        'staff-member-category',
1539        'staff-member-group',
1540        'staff_category',
1541        'staffgroups',
1542        'state',
1543        'status',
1544        'store',
1545        'stores',
1546        'studio',
1547        'study_level',
1548        'style',
1549        'style_category',
1550        'sub_transaction_action',
1551        'sub_transaction_result',
1552        'subcategory',
1553        'subject',
1554        'subscription_status',
1555        'swift-slider-category',
1556        'syn_sitegroup',
1557        'szbl-content-tag',
1558        'task-queue',
1559        'tax_feature',
1560        'tcb_symbols_tax',
1561        'tcp_product_category',
1562        'team',
1563        'team-category',
1564        'team_cat',
1565        'team_categories',
1566        'team_category',
1567        'team_cats',
1568        'team_department',
1569        'team_designation',
1570        'team_group',
1571        'team_member_position',
1572        'team_mfcategory',
1573        'teams',
1574        'tenant_categories',
1575        'tenant_location',
1576        'tender-category',
1577        'test-type',
1578        'testimonial-category',
1579        'testimonial-group',
1580        'testimonial-types',
1581        'testimonial_categories',
1582        'testimonial_category',
1583        'testimonials-category',
1584        'testimonials_category',
1585        'th_events_cat',
1586        'th_galleries_cat',
1587        'thegem_clients_sets',
1588        'thegem_news_sets',
1589        'thegem_portfolios',
1590        'thegem_quickfinders',
1591        'thegem_teams',
1592        'thegem_testimonials_sets',
1593        'theme',
1594        'themefusion_es_groups',
1595        'themes_categories',
1596        'themo_cpt_group',
1597        'themo_project_type',
1598        'themo_room_type',
1599        'thirstylink-category',
1600        'ticket_channel',
1601        'ticket_priority',
1602        'timeline_post_tag',
1603        'tipo',
1604        'tipologie',
1605        'tips',
1606        'tm-testimonials_category',
1607        'tm_testimonial_group',
1608        'tooltips_categories',
1609        'tour_category',
1610        'tour_destination',
1611        'tour_facility',
1612        'tour_phys',
1613        'tour_type',
1614        'tp_event_category',
1615        'transmission',
1616        'treatment-type',
1617        'tribe_events_cat',
1618        'truethemes-gallery-category',
1619        'tsas-category',
1620        'tshowcase-categories',
1621        'tsml_region',
1622        'ttshowcase_groups',
1623        'tvo_tags',
1624        'type',
1625        'types',
1626        'u_course_cat',
1627        'u_department',
1628        'u_event_cat',
1629        'ufaq-category',
1630        'ufaq-tag',
1631        'um_hashtag',
1632        'um_user_tag',
1633        'uncodeblock_category',
1634        'upg_cate',
1635        'urp-review-category',
1636        'us_portfolio_category',
1637        'us_testimonial_category',
1638        'user-group',
1639        'user_category',
1640        'user_status',
1641        'vendor',
1642        'venue',
1643        'video-category',
1644        'video-series',
1645        'video-tag',
1646        'video_category',
1647        'video_tag',
1648        'videos',
1649        'videos_categories',
1650        'voice_category',
1651        'vtmin_rule_category',
1652        'vtprd_rule_category',
1653        'w2dc-category',
1654        'w2dc-location',
1655        'w2dc-tag',
1656        'wcb_sponsor_level',
1657        'wcb_track',
1658        'wccf_checkout_field_field_type',
1659        'wccf_checkout_field_status',
1660        'wccf_order_field_field_type',
1661        'wccf_order_field_status',
1662        'wccf_product_field_field_type',
1663        'wccf_product_field_status',
1664        'wccf_product_prop_field_type',
1665        'wccf_product_prop_status',
1666        'wccf_user_field_field_type',
1667        'wccf_user_field_status',
1668        'wcfm_knowledgebase_category',
1669        'wcm_task_category',
1670        'wcpv_product_vendors',
1671        'wcs-instructor',
1672        'wcs-room',
1673        'wcs-type',
1674        'wdca_ad_categories',
1675        'webinar_type_cat',
1676        'where',
1677        'who',
1678        'wiki-category',
1679        'wiki_cats',
1680        'wl_entity_type',
1681        'workout_entries',
1682        'works-category',
1683        'wp-rest-api-log-method',
1684        'wp-rest-api-log-source',
1685        'wp-rest-api-log-status',
1686        'wp-type-activity-types',
1687        'wp-type-contacts-subtype',
1688        'wp-type-group',
1689        'wp_bannerize_tax',
1690        'wp_log_type',
1691        'wp_super_faq_category',
1692        'wpbdm-region',
1693        'wpbdp_category',
1694        'wpbdp_tag',
1695        'wpcm_make_model',
1696        'wpdmcategory',
1697        'wpfb_file_category',
1698        'wpfcas-category',
1699        'wpfd-category',
1700        'wplead_list_category',
1701        'wplss_logo_showcase_cat',
1702        'wpm-testimonial-category',
1703        'wpmf-category',
1704        'wpostahs-slider-category',
1705        'wprm_course',
1706        'wprm_cuisine',
1707        'wprm_ingredient',
1708        'wprm_keyword',
1709        'wprss_category',
1710        'wps_forum',
1711        'wpsc-variation',
1712        'wpsc_log_type',
1713        'wpsc_product_category',
1714        'wpseo_locations_category',
1715        'wpsisac_slider-category',
1716        'wpsl_store_category',
1717        'wpt_category',
1718        'wpt_result',
1719        'wpt_scale',
1720        'wpv_sermons_category',
1721        'wpvqgr_tag',
1722        'writer',
1723        'wyz_business_category',
1724        'wyz_business_rating_category',
1725        'wyz_business_tag',
1726        'wzkb_category',
1727        'year',
1728        'years',
1729        'yith_product_brand',
1730        'yith_shop_vendor',
1731        'yst_prominent_words',
1732        'zipcode',
1733        'zoninator_zones',
1734        'zrf_field_group',
1735
1736        // End The Backlog  @see https://wp.me/p9MPsk-X0.
1737        'bill-status',
1738        'etb-audience',
1739        'etb-state',
1740        'etb-target',
1741        'etb-topic',
1742        'etb-year',
1743        'foia-response-status',
1744        'target-type',
1745        'timeline-pillar',
1746        'timeline-type',
1747
1748        // wp.com martketplace search - @see https://wp.me/pdh6GB-Ax#comment-2104
1749        'wpcom_marketplace_categories',
1750
1751        // wp.com a8c-support-theme taxonomies.
1752        'kb_category',
1753        'kb_tag',
1754
1755        // coolhunting.com
1756        'article-type',
1757
1758    ); // end taxonomies.
1759
1760    /**
1761     * List of options to sync
1762     *
1763     * @access private
1764     * @static
1765     *
1766     * @var array
1767     */
1768    private static $options_to_sync = array(
1769        'jetpack_search_ai_prompt_override',
1770        'jetpack_search_color_theme',
1771        'jetpack_search_result_format',
1772        'jetpack_search_default_sort',
1773        'jetpack_search_overlay_trigger',
1774        'jetpack_search_excluded_post_types',
1775        'jetpack_search_highlight_color',
1776        'jetpack_search_enable_sort',
1777        'jetpack_search_inf_scroll',
1778        'jetpack_search_show_powered_by',
1779        'jetpack_search_experience',
1780        'jetpack_search_ai_answers_enabled',
1781        'jetpack_search_suggestions_enabled',
1782        'jetpack_search_override_woocommerce_search_template',
1783        'reader_chat',
1784        'instant_search_enabled',
1785    ); // end options.
1786
1787    /*
1788     * Taxonomies we know don't sync.
1789     * See also sync/src/class-defaults.php
1790     *
1791     * 'network'
1792     * 'post_status'
1793     * 'product_cat'
1794     * 'tags'
1795     *
1796     */
1797
1798    //
1799    // Hooks into sync.
1800
1801    /**
1802     * Add Search post meta to the post meta whitelist.
1803     *
1804     * @param array $list Existing post meta whitelist.
1805     * @return array Updated post meta whitelist.
1806     */
1807    public function add_search_post_meta_whitelist( $list ) {
1808        return array_merge( $list, static::get_all_postmeta_keys() );
1809    }
1810
1811    /**
1812     * Add Search options to the options whitelist.
1813     *
1814     * @param array $list Existing options whitelist.
1815     * @return array Updated options whitelist.
1816     */
1817    public function add_search_options_whitelist( $list ) {
1818        return array_merge( $list, static::get_all_option_keys() );
1819    }
1820
1821    /**
1822     * Add AI Answer CPTs to the post types sync whitelist when AI Answers is enabled.
1823     *
1824     * @param array $list Existing post types whitelist.
1825     * @return array Updated whitelist.
1826     */
1827    public function add_ai_answer_post_types( $list ) {
1828        $ai_answers_enabled = class_exists( AI_Answers::class )
1829            ? AI_Answers::is_enabled()
1830            : apply_filters( 'jetpack_search_ai_answers_enabled', (bool) get_option( 'jetpack_search_ai_answers_enabled', false ) );
1831
1832        if ( ! $ai_answers_enabled ) {
1833            return $list;
1834        }
1835        $list[] = 'wp_guideline';
1836        return $list;
1837    }
1838
1839    // Indexing functions for wp.com.
1840
1841    /**
1842     * Check whether a postmeta or taxonomy 'key' is in the indexable
1843     * list. This is called by the indexing code on wp.com to decide
1844     * whether to include something in the index.
1845     *
1846     * @static
1847     * @access public
1848     *
1849     * @param string $type Either 'postmeta' or 'taxonomy'.
1850     * @param string $key The postmeta key or taxonomy name.
1851     * @return boolean
1852     */
1853    public static function is_indexable( $type, $key ) {
1854        switch ( $type ) {
1855            case 'postmeta':
1856                return isset( self::$postmeta_to_sync[ $key ] );
1857            case 'taxonomy':
1858                return in_array( $key, self::$taxonomies_to_sync, true );
1859        }
1860        return false;
1861    }
1862
1863    /**
1864     *
1865     * Get the indexing spec for a postmeta key.
1866     *
1867     * @static
1868     * @access public
1869     *
1870     * @param string $key The postmeta key.
1871     * @return array The spec.
1872     */
1873    public static function get_postmeta_spec( $key ) {
1874        return self::$postmeta_to_sync[ $key ];
1875    }
1876
1877    /**
1878     * Get all post meta keys that get synced.
1879     *
1880     * @access public
1881     *
1882     * @return array List of post meta keys that get synced.
1883     */
1884    public static function get_all_postmeta_keys() {
1885        return array_keys( self::$postmeta_to_sync );
1886    }
1887
1888    /**
1889     * Get all option keys that get synced.
1890     *
1891     * @access public
1892     *
1893     * @return array List of option keys that get synced.
1894     */
1895    public static function get_all_option_keys() {
1896        return self::$options_to_sync;
1897    }
1898
1899    /**
1900     * Get all unindexed postmeta.
1901     *  This is mostly for testing.
1902     *
1903     * @access public
1904     *
1905     * @return array List of postmeta that are not synced.
1906     */
1907    public static function get_all_unindexed_postmeta_keys() {
1908        return array_keys( self::$unindexed_postmeta );
1909    }
1910
1911    /**
1912     * Get all taxonomies that get synced.
1913     *  This is mostly for testing.
1914     *
1915     * @access public
1916     *
1917     * @return array List of taxonomies that get synced.
1918     */
1919    public static function get_all_taxonomies() {
1920        return self::$taxonomies_to_sync;
1921    }
1922}