/** * @covers WPGlobus_Core::has_translations */ public function test_has_translations() { /** @var string[] $positives */ $positives = array('{:en}EN{:}{:ru}RU{:}', '[:en]EN[:ru]RU', '<!--:en-->EN<!--:--><!--:ru-->RU<!--:-->', "Multi-line\n\n {:en}E\nN{:}\n\n{:ru}RU{:}", '{:xx', 'Lead {:xx', 'Lead {:xx trail'); foreach ($positives as $_) { self::assertTrue(WPGlobus_Core::has_translations($_), 'Has translation: ' . $_); } /** @var string[] $negatives */ $negatives = array('', 'No delimiters', 'Wrong delimiter {xx:}', 'One-character locale {:e}', 'Non-alpha locale {:e1}EN{:}{:r2}RU{:}', 'Non-latin locale {:ан}EN{:}{:ру}RU{:}', 'Uppercase locale {:EN}EN{:}{:RU}RU{:}'); foreach ($negatives as $_) { self::assertFalse(WPGlobus_Core::has_translations($_), 'Has no translation: ' . $_); } }
/** * Filter @see get_terms_to_edit() * @since 1.6.4 * * @param string * * @return string */ public static function filter__terms_to_edit($terms_to_edit) { if (!WPGlobus_Core::has_translations($terms_to_edit)) { return $terms_to_edit; } $terms = explode(',', $terms_to_edit); foreach ($terms as $k => $term) { $terms[$k] = WPGlobus_Core::text_filter($term, WPGlobus::Config()->language); } return implode(',', $terms); }
/** * Generate title * * @see get_title_from_options() * @scope front * @since 1.1.1 * * @param string $text * * @return string */ public static function filter__title($text) { global $post; if (!empty($post)) { $yoast_wpseo_title = get_post_meta($post->ID, '_yoast_wpseo_title', true); } if (empty($yoast_wpseo_title)) { if (WPGlobus::Config()->language == WPGlobus::Config()->default_language) { /** * When meta '_yoast_wpseo_title' is empty * for default language we get autogenerated $text like 'Title - WPGlobus' */ /** do nothing */ /** * but sometimes (noted for pages) we get title like '{:en}Title{:}{:ru}Заголовок{:} - WPGlobus' * @since 1.4.1 */ if (WPGlobus_Core::has_translations($text)) { $text = self::extract_title($text); } } else { /** * When meta '_yoast_wpseo_title' is empty * for extra languages we get autogenerated $text like '{:en}Title{:}{:ru}Заголовок{:} - ВПГлобус' */ $text = self::extract_title($text); } } else { /** * When meta '_yoast_wpseo_title' is not empty */ $text = WPGlobus_Core::text_filter($text, WPGlobus::Config()->language, WPGlobus::RETURN_EMPTY); if (WPGlobus::Config()->language == WPGlobus::Config()->default_language) { /** do nothing */ } else { if (empty($text)) { $opts = WPSEO_Options::get_all(); $replace_vars = $opts['title-post']; if (!empty($opts['title-' . $post->post_type])) { $replace_vars = $opts['title-' . $post->post_type]; } $post->post_title = WPGlobus_Core::text_filter($post->post_title, WPGlobus::Config()->language, WPGlobus::RETURN_EMPTY); $text = wpseo_replace_vars($replace_vars, $post); /** @todo investigate generation title with WPSEO_Frontend remove_filter( 'wpseo_title', array( 'WPGlobus_YoastSEO', 'filter__title' ), 0 ); $f = WPSEO_Frontend::get_instance(); $t = $f->title(''); // */ } } } return $text; }
/** * Handle ajax process */ public function on_process_ajax() { $ajax_return = array(); $order = $_POST['order']; switch ($order['action']) { case 'clean': case 'wpglobus-reset': require_once 'admin/class-wpglobus-clean.php'; WPGlobus_Clean::process_ajax($order); break; case 'save_post_meta_settings': $settings = (array) get_option(WPGlobus::Config()->option_post_meta_settings); if (empty($settings[$order['post_type']])) { $settings[$order['post_type']] = array(); } $settings[$order['post_type']][$order['meta_key']] = $order['checked']; if (update_option(WPGlobus::Config()->option_post_meta_settings, $settings)) { $ajax_return['result'] = 'ok'; } else { $ajax_return['result'] = 'error'; } $ajax_return['checked'] = $order['checked']; $ajax_return['id'] = $order['id']; $ajax_return['meta_key'] = $order['meta_key']; break; case 'wpglobus_select_lang': if ($order['locale'] == 'en_US') { update_option('WPLANG', ''); } else { update_option('WPLANG', $order['locale']); } break; case 'get_titles': if ('taxonomy' === $order['type']) { /** * Remove filter to get raw term description */ remove_filter('get_term', array('WPGlobus_Filters', 'filter__get_term'), 0); } $config = WPGlobus::Config(); $result = array(); $bulkedit_post_titles = array(); /** * Iterate through the Titles array. * * @var int $id Post or Term ID. * @var string $title Post or Term Name. */ foreach ((array) $order['title'] as $id => $title) { if (!WPGlobus_Core::has_translations($title['source'])) { /** * In some cases, we've lost the raw data for post title on edit.php page * for example product post type from Woo. */ $_title_from_db = ''; if ('post' === $order['type']) { $_title_from_db = get_post_field('post_title', $id); } elseif ('taxonomy' === $order['type']) { if ($_term_by_id = get_term_by('id', $id, $order['taxonomy'])) { $_title_from_db = $_term_by_id->name; } } if ($_title_from_db) { $title['source'] = $_title_from_db; } unset($_term_by_id, $_title_from_db); } $result[$id]['source'] = $title['source']; $term = null; // should initialize before if because used in the next foreach if ($order['type'] == 'taxonomy' && $order['taxonomy']) { $term = get_term($id, $order['taxonomy']); if (is_wp_error($term)) { $order['taxonomy'] = false; } } foreach ($config->enabled_languages as $language) { $return = $language == $config->default_language ? WPGlobus::RETURN_IN_DEFAULT_LANGUAGE : WPGlobus::RETURN_EMPTY; $result[$id][$language]['name'] = WPGlobus_Core::text_filter($title['source'], $language, $return); if ($term && $order['type'] == 'taxonomy' && $order['taxonomy']) { $result[$id][$language]['description'] = WPGlobus_Core::text_filter($term->description, $language, $return); } $bulkedit_post_titles[$id][$language]['name'] = WPGlobus_Core::text_filter($title['source'], $language, WPGlobus::RETURN_IN_DEFAULT_LANGUAGE); } } $ajax_return['qedit_titles'] = $result; $ajax_return['bulkedit_post_titles'] = $bulkedit_post_titles; break; } echo json_encode($ajax_return); die; }
/** * Filter text. * We need own filter to avoid duplicate keyword from language by default in extra languages. * * @since 1.6.6 * @param string $text * * @return string */ public static function filter__text($text) { if (!WPGlobus_Core::has_translations($text)) { return $text; } return WPGlobus_Core::text_filter($text, WPGlobus::Config()->language, WPGlobus::RETURN_EMPTY); }