/** * @inheritDoc */ protected function createTermsFromEntry($postId, EntryInterface $entry) { $ids = parent::createTermsFromEntry($postId, $entry); if (!empty($ids) && $this->language && function_exists('pll_set_post_language')) { foreach ($ids as $id) { pll_set_term_language($is, $this->language); } } return $ids; }
/** * Function to create network-wide term in a given site. * * This function will switch the given blog_id, create the term and then switch back to the current blog. * * @since 1.0.0 * @param string $blog_id the id of the blog in which to set the therm. */ protected function create_blog_term($blog_id, $term_name = null, $term_slug = null, $term_description = 'Network-wide -- DO NOT DELETE') { if (!isset($term_name)) { $term_name = $this->term_name; } if (!isset($term_slug)) { $term_slug = $this->term_slug; } $current_blog_id = get_current_blog_id(); switch_to_blog($blog_id); //let's get the languages used on that site $translations = pll_languages_list(array('hide_empty' => 0, 'fields' => 'slug')); $language_name = pll_languages_list(array('hide_empty' => 0, 'fields' => 'name')); //if we found some languages, let's cache them for ($idx = 0; $idx < sizeof($language_name); $idx++) { $this->set_language($translations[$idx], $language_name[$idx]); } //else we assume we are dealing with the default language if (empty($translations)) { $translations = array($this->default_lang); error_log("Warning (Network-wide-posts) No Polylang languages set in blog: " . $blog_id . ", assuming default language (" . $this->default_lang . ")"); } $term_ids = array(); //term id storage array foreach ($translations as $lang) { $term_slug = $this->term_slug . "-" . $lang; $term_name = $this->term_name . " (" . $lang . ")"; if ($this->default_lang == $lang) { $term_slug = $this->term_slug; $term_name = $this->term_name; } $args = array('description' => $term_description, 'slug' => $term_slug); switch (true) { case self::AUTOMATIC_TAG === $this->term_type: $taxonomy = 'post_tag'; $term = get_term_by('slug', $args['slug'], $taxonomy); if (!$term) { //create tag $term = wp_insert_term($term_name, $taxonomy, $args); if (is_array($term)) { $term_id = $term['term_id']; } else { $term_id = -1; } } else { $term_id = $term->term_id; } //associate the new term with the correct language pll_set_term_language($term_id, $lang); //let's keep a cache for quicker loading. $term_ids[$lang] = $term_id; $this->set_blog_term_id($blog_id, $term_ids); break; case self::AUTOMATIC_CAT === $this->term_type: $taxonomy = 'category'; $term_ids = array(); $term = get_term_by('slug', $args['slug'], $taxonomy); if (!$term) { //create tag $term = wp_insert_term($term_name, $taxonomy, $args); if (is_array($term)) { $term_id = $term['term_id']; } else { $term_id = -1; } } else { $term_id = $term->term_id; } pll_set_term_language($term_id, $lang['slug']); $term_ids[$lang['slug']] = $term_id; $this->set_blog_term_id($blog_id, $term_id); break; case self::SELECTED_TAX === $this->term_type: default: //TODO, nothing? break; } } //switch back to current blog //switch_to_blog($current_blog_id); //back to where we started restore_current_blog(); }