/** * Ajax handler for adding a term via Ajax. */ public static function wpml_save_term() { if (!wpml_is_action_authenticated('wpml_save_term')) { wp_send_json_error('Wrong Nonce'); } global $sitepress; $lang = filter_input(INPUT_POST, 'term_language_code', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $taxonomy = filter_input(INPUT_POST, 'taxonomy'); $slug = filter_input(INPUT_POST, 'slug'); $name = filter_input(INPUT_POST, 'name'); $trid = filter_input(INPUT_POST, 'trid', FILTER_SANITIZE_NUMBER_INT); $description = filter_input(INPUT_POST, 'description'); $new_term_object = false; if ($name !== "" && $taxonomy && $trid && $lang) { $args = array('taxonomy' => $taxonomy, 'lang_code' => $lang, 'term' => $name, 'trid' => $trid, 'overwrite' => true); if ($slug) { $args['slug'] = $slug; } if ($description) { $args['description'] = $description; } $res = WPML_Terms_Translations::create_new_term($args); if ($res && isset($res['term_taxonomy_id'])) { /* res holds the term taxonomy id, we return the whole term objects to the ajax call */ $new_term_object = get_term_by('term_taxonomy_id', (int) $res['term_taxonomy_id'], $taxonomy); $lang_details = $sitepress->get_element_language_details($new_term_object->term_taxonomy_id, 'tax_' . $new_term_object->taxonomy); $new_term_object->trid = $lang_details->trid; $new_term_object->language_code = $lang_details->language_code; WPML_Terms_Translations::icl_save_term_translation_action($taxonomy, $res); } } wp_send_json_success($new_term_object); }
public static function save_term_ajax($sitepress, $lang, $taxonomy, $slug, $name, $trid, $description) { $new_term_object = false; if ($name !== "" && $taxonomy && $trid && $lang) { $args = array('taxonomy' => $taxonomy, 'lang_code' => $lang, 'term' => $name, 'trid' => $trid, 'overwrite' => true); if ($slug) { $args['slug'] = $slug; } if ($description) { $args['description'] = $description; } $switch_lang = new WPML_Temporary_Switch_Language($sitepress, $lang); $res = WPML_Terms_Translations::create_new_term($args); $switch_lang->restore_lang(); if ($res && isset($res['term_taxonomy_id'])) { /* res holds the term taxonomy id, we return the whole term objects to the ajax call */ $switch_lang = new WPML_Temporary_Switch_Language($sitepress, $lang); $new_term_object = get_term_by('term_taxonomy_id', (int) $res['term_taxonomy_id'], $taxonomy); $switch_lang->restore_lang(); $lang_details = $sitepress->get_element_language_details($new_term_object->term_taxonomy_id, 'tax_' . $new_term_object->taxonomy); $new_term_object->trid = $lang_details->trid; $new_term_object->language_code = $lang_details->language_code; WPML_Terms_Translations::icl_save_term_translation_action($taxonomy, $res); } } return $new_term_object; }
/** * Ajax handler for adding a term via Ajax. */ public static function wpml_save_term() { global $sitepress; $taxonomy = false; $lang = false; $name = false; $slug = false; $trid = false; $description = false; $sync = false; $nonce = filter_input(INPUT_POST, '_icl_nonce'); if (!wp_verify_nonce($nonce, 'wpml_save_term_nonce')) { wp_send_json_error('Wrong Nonce'); } if (isset($_POST['term_language_code'])) { $lang = $_POST['term_language_code']; } if (isset($_POST['taxonomy'])) { $taxonomy = $_POST['taxonomy']; } if (isset($_POST['slug'])) { $slug = $_POST['slug']; } if (isset($_POST['name'])) { $name = $_POST['name']; } if (isset($_POST['trid'])) { $trid = $_POST['trid']; } if (isset($_POST['description'])) { $description = $_POST['description']; } if (isset($_POST['force_hierarchical_sync'])) { $sync = $_POST['force_hierarchical_sync']; } $new_term_object = false; if ($name && $taxonomy && $trid && $lang) { $args = array('taxonomy' => $taxonomy, 'lang_code' => $lang, 'term' => $name, 'trid' => $trid, 'overwrite' => true); if ($slug) { $args['slug'] = $slug; } if ($description) { $args['description'] = $description; } $res = WPML_Terms_Translations::create_new_term($args); if ($res && isset($res['term_taxonomy_id'])) { /* res holds the term taxonomy id, we return the whole term objects to the ajax call */ $new_term_object = get_term_by('term_taxonomy_id', (int) $res['term_taxonomy_id'], $taxonomy); $lang_details = $sitepress->get_element_language_details($new_term_object->term_taxonomy_id, 'tax_' . $new_term_object->taxonomy); $new_term_object->trid = $lang_details->trid; $new_term_object->language_code = $lang_details->language_code; WPML_Terms_Translations::icl_save_term_translation_action($taxonomy, $res); if ($sync) { $tree = new WPML_Translation_Tree($taxonomy); $tree->sync_tree($lang, $sync); } } } wp_send_json_success($new_term_object); }
/** * Ajax handler for adding a term to a post. * todo: use the return of this for flat terms. Check its use for hierarchical ones. */ public static function wpml_add_term_to_post() { $post_id = false; $taxonomy = false; $lang = false; $term_strings = false; if (isset($_POST['wpml_lang'])) { $lang = $_POST['wpml_lang']; } if (isset($_POST['wpml_taxonomy'])) { $taxonomy = $_POST['wpml_taxonomy']; } if (isset($_POST['wpml_post_id'])) { $post_id = $_POST['wpml_post_id']; } if (isset($_POST['wpml_terms'])) { $term_strings = $_POST['wpml_terms']; } $args = array('taxonomy' => $taxonomy, 'lang_code' => $lang); /* Hierarchical terms might have a parent element */ $hierarchical_flag = is_taxonomy_hierarchical($taxonomy); if ($hierarchical_flag) { if (isset($_POST['wpml_term_parent_id'])) { $parent_id = $_POST['wpml_term_parent_id']; if ($parent_id) { $args['parent'] = $parent_id; } } } $result = array(); foreach ((array) $term_strings as $term_string) { if (!$term_string) { continue; } $args['term'] = (string) $term_string; if ($post_id) { $res = WPML_Terms_Translations::create_term_on_post($post_id, $args); } else { $res = WPML_Terms_Translations::create_new_term($args); } if ($res) { $new_term_object = get_term_by('term_taxonomy_id', (int) $res, $taxonomy); if ($new_term_object) { if ($hierarchical_flag) { /* These are to be displayed as selected in the post edit screen */ $new_term_object->selected = true; /* These are only created one at a time, so they have their special index in the result */ $result['new_h_term'] = $new_term_object; } else { $result[] = $new_term_object; } } } } wp_send_json_success($result); }
/** * 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; }