function process_posts() { $menu_items = $mo_posts = array(); // store this for future usage as parent function unset $this->posts foreach ($this->posts as $post) { if ('nav_menu_item' == $post['post_type']) { $menu_items[] = $post; } if (0 === strpos($post['post_title'], 'polylang_mo_')) { $mo_posts[] = $post; } } if (!empty($mo_posts)) { new PLL_MO(); } // just to register the polylang_mo post type before processing posts parent::process_posts(); global $polylang; $polylang->model->clean_languages_cache(); // to update the posts count in (cached) languages list $this->remap_translations($this->post_translations, $this->processed_posts); unset($this->post_translations); // language switcher menu items foreach ($menu_items as $item) { foreach ($item['postmeta'] as $meta) { if ('_pll_menu_item' == $meta['key']) { update_post_meta($this->processed_menu_items[$item['post_id']], '_pll_menu_item', maybe_unserialize($meta['value'])); } } } // merge strings translations foreach ($mo_posts as $post) { $lang_id = (int) substr($post['post_title'], 12); if (!empty($this->processed_terms[$lang_id])) { if ($strings = unserialize($post['post_content'])) { $mo = new PLL_MO(); $mo->import_from_db($this->processed_terms[$lang_id]); foreach ($strings as $msg) { $mo->add_entry_or_merge($mo->make_entry($msg[0], $msg[1])); } $mo->export_to_db($this->processed_terms[$lang_id]); } } // delete the now useless imported post wp_delete_post($this->processed_posts[$post['post_id']], true); } }