/** * @param String $slug * @param String $taxonomy * Filters slug input, so to ensure uniqueness of term slugs. * * @return String Either the original slug or a new slug that has been generated from the original one in order to * ensure slug uniqueness. */ public function pre_term_slug_filter($slug, $taxonomy) { if ((isset($_REQUEST['tag-name']) || isset($_REQUEST['name'])) && (isset($_REQUEST['action']) && $_REQUEST['action'] === 'add-tag')) { $lang = $this->lang_term_slug_save($taxonomy); if ($slug === '') { if (isset($_REQUEST['tag-name'])) { $slug = sanitize_title($_REQUEST['tag-name']); } elseif (isset($_REQUEST['name'])) { $slug = sanitize_title($_REQUEST['name']); } } $slug = $slug !== '' ? WPML_Terms_Translations::term_unique_slug($slug, $taxonomy, $lang) : $slug; } return $slug; }
/** * Manages the creation of new taxonomy terms from metadata values * * @since 2.20 * * @param mixed string or array value returned by the rule * @param string field name or taxonomy name * @param integer post ID to be evaluated * @param string category/scope to evaluate against: iptc_exif_standard_mapping, iptc_exif_taxonomy_mapping or iptc_exif_custom_mapping * @param array attachment_metadata, default NULL * * @return array updated rule EXIF/Template value */ public static function mla_mapping_new_text($new_text, $setting_key, $post_id, $category, $attachment_metadata) { global $sitepress; static $replicate = NULL, $current_language, $taxonomies, $other_languages; if ('iptc_exif_taxonomy_mapping' !== $category) { return $new_text; } if (is_null($replicate)) { $replicate = 'checked' == MLACore::mla_get_option('term_mapping_replication', false, false, MLA_WPML::$mla_language_option_definitions); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $replicate = ' . var_export( $replicate, true ), 0 ); //$term_utils = new WPML_Terms_Translations(); $current_language = $sitepress->get_current_language(); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $current_language = ' . var_export( $current_language, true ), 0 ); $taxonomies = $sitepress->get_translatable_taxonomies(true, 'attachment'); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $taxonomies = ' . var_export( $taxonomies, true ), 0 ); $other_languages = $sitepress->get_active_languages(); unset($other_languages[$current_language]); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $other_languages = ' . var_export( $other_languages, true ), 0 ); } if (!empty($new_text) && in_array($setting_key, $taxonomies)) { //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text mapping rule = ' . var_export( self::$current_mapping_rule, true ), 0 ); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $new_text = ' . var_export( $new_text, true ), 0 ); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $setting_key = ' . var_export( $setting_key, true ), 0 ); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $post_id = ' . var_export( $post_id, true ), 0 ); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $category = ' . var_export( $category, true ), 0 ); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $attachment_metadata = ' . var_export( $attachment_metadata, true ), 0 ); $language_details = $sitepress->get_element_language_details($post_id, 'post_attachment'); $item_language = $language_details->language_code; //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $language_details = ' . var_export( $language_details, true ), 0 ); /* * Find the parent term and its translations */ if (isset(self::$current_mapping_rule['parent'])) { if ($parent_term = absint(self::$current_mapping_rule['parent'])) { $parent_term = self::_get_relevant_term('id', $parent_term, $setting_key); } } else { $parent_term = 0; } //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $parent_term = ' . var_export( $parent_term, true ), 0 ); $new_terms = array(); foreach ($new_text as $new_name) { $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 ); if ($relevant_term) { if (isset($relevant_term['translations'][$item_language])) { $new_terms[] = absint($relevant_term['translations'][$item_language]->term_id); } } else { /* * Always create the new term in the current language */ if ($parent_term && isset($parent_term['translations'][$current_language])) { $parent = $parent_term['translations'][$current_language]->term_id; } else { $parent = 0; } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 ); $args = array('taxonomy' => $setting_key, 'lang_code' => $current_language, 'term' => $new_name, 'parent' => $parent); $res = WPML_Terms_Translations::create_new_term($args); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 ); /* * Add translations in the other languages? */ if ($replicate) { $trid = $sitepress->get_element_trid($res['term_taxonomy_id'], 'tax_' . $setting_key); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $trid = ' . var_export( $trid, true ), 0 ); $original_term = get_term($res['term_id'], $setting_key, OBJECT, 'no'); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $original_term = ' . var_export( $original_term, true ), 0 ); $args = array('trid' => $trid, 'source_language' => $current_language, 'term' => $new_name, 'original_id' => $res['term_id'], 'original_tax_id' => $res['term_taxonomy_id'], 'taxonomy' => $setting_key, 'update_translations' => true); foreach ($other_languages as $language => $language_details) { if ($parent_term && isset($parent_term['translations'][$language])) { $parent = $parent_term['translations'][$language]->term_id; } else { $parent = 0; } //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 ); $translated_slug = apply_filters('icl_duplicate_generic_string', $original_term->slug, $language, array('context' => 'taxonomy_slug', 'attribute' => $setting_key, 'key' => $original_term->term_id)); $translated_slug = WPML_Terms_Translations::term_unique_slug($translated_slug, $setting_key, $language); //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $translated_slug = ' . var_export( $translated_slug, true ), 0 ); $args['slug'] = $translated_slug; $args['parent'] = $parent; $args['lang_code'] = $language; //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $args = ' . var_export( $args, true ), 0 ); $res = WPML_Terms_Translations::create_new_term($args); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 ); } } // replicate /* * Reload the term with all of its new translations */ $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key, NULL, false, true); //error_log( __LINE__ . ' MLA_WPML::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 ); if (isset($relevant_term['translations'][$item_language])) { $new_terms[] = absint($relevant_term['translations'][$item_language]->term_id); } } // new term } // foreach new_name MLACore::mla_debug_add(__LINE__ . " MLA_WPML::mla_mapping_new_text( {$setting_key}, {$post_id} ) \$new_terms = " . var_export($new_terms, true), MLACore::MLA_DEBUG_CATEGORY_AJAX); return $new_terms; } // translated taxonomy return $new_text; }
public function __construct($args) { /** * Actual name of the term. Same as the name input argument to \wp_update_term or \wp_insert_term * @var string|bool */ $term = false; $slug = ''; $taxonomy = ''; /** @var string $lang_code */ $lang_code = ''; $trid = null; /** @var int|bool $original_tax_id */ $original_tax_id = false; /** * Taxonomy_term_id of the parent element * @var int */ $parent = 0; $description = false; $term_group = false; $source_language = null; extract($args, EXTR_OVERWRITE); // We cannot create a term unless we at least know its name if ($term && $taxonomy) { $this->wp_new_term_args['name'] = $term; $this->taxonomy = $taxonomy; } else { $this->is_valid = false; return; } if ($parent) { $this->wp_new_term_args['parent'] = $parent; } if ($description) { $this->wp_new_term_args['description'] = $description; } if ($term_group) { $this->wp_new_term_args['term_group'] = $term_group; } $this->wp_new_term_args['term_group'] = $term_group; $this->is_valid = $this->set_language_information($trid, $original_tax_id, $lang_code, $source_language); $this->set_action_type(); if (!$this->is_update || $this->is_update && $slug != '' && $slug != $this->old_slug) { if (trim($slug) == '') { $slug = sanitize_title($term); } $slug = WPML_Terms_Translations::term_unique_slug($slug, $taxonomy, $lang_code); $this->wp_new_term_args['slug'] = $slug; } }
function trbl_duplicate_terms() { $nonce = filter_input(INPUT_POST, 'wcml_nonce', FILTER_SANITIZE_FULL_SPECIAL_CHARS); if (!$nonce || !wp_verify_nonce($nonce, 'trbl_duplicate_terms')) { die('Invalid nonce'); } global $sitepress; $attr = isset($_POST['attr']) ? $_POST['attr'] : false; $terms = get_terms($attr, 'hide_empty=0'); $i = 0; $languages = $sitepress->get_active_languages(); foreach ($terms as $term) { foreach ($languages as $language) { $tr_id = apply_filters('translate_object_id', $term->term_id, $attr, false, $language['code']); if (is_null($tr_id)) { $term_args = array(); // hierarchy - parents if (is_taxonomy_hierarchical($attr)) { // fix hierarchy if ($term->parent) { $original_parent_translated = apply_filters('translate_object_id', $term->parent, $attr, false, $language['code']); if ($original_parent_translated) { $term_args['parent'] = $original_parent_translated; } } } if (version_compare(ICL_SITEPRESS_VERSION, '3.1.8.2', '<=')) { $term_name = $term->name . ' @' . $language['code']; } else { $term_name = $term->name; $slug = $term->name . '-' . $language['code']; $slug = WPML_Terms_Translations::term_unique_slug($slug, $attr, $language['code']); $term_args['slug'] = $slug; } $new_term = wp_insert_term($term_name, $attr, $term_args); if ($new_term && !is_wp_error($new_term)) { $tt_id = $sitepress->get_element_trid($term->term_taxonomy_id, 'tax_' . $attr); $sitepress->set_element_language_details($new_term['term_taxonomy_id'], 'tax_' . $attr, $tt_id, $language['code']); } } } } echo 1; die; }