Function Reference: geodir_icl_duplicate_taxonomies

Summary

Duplicate post taxonomies for WPML translation post.

Global Values

$sitepress
(object) (required) Sitepress WPML object.

Default: None
$wpdb
(object) (required) WordPress Database object.

Default: None

Parameters

$master_post_id
(int) (required) Original Post ID.

Default: None
$tr_post_id
(int) (required) Translation Post ID.

Default: None
$lang
(string) (required) Language code for translating post.

Default: None

Return Values

(bool)
  • True for success, False for fail.

Change Log

Since: 1.5.0

Filters

‘translate_object_id’ [Line: 2700]

Source File

geodir_icl_duplicate_taxonomies() is located in geodirectory-functions/custom_functions.php [Line: 2687]

Source Code

function geodir_icl_duplicate_taxonomies($master_post_id, $tr_post_id, $lang) {
	global $sitepress, $wpdb;
	$post_type = get_post_type($master_post_id);

	remove_filter('get_term', array($sitepress,'get_term_adjust_id')); // AVOID filtering to current language

	$taxonomies = get_object_taxonomies($post_type);
	foreach ($taxonomies as $taxonomy) {
		$terms = get_the_terms($master_post_id, $taxonomy);
		$terms_array = array();

		if ($terms) {
			foreach ($terms as $term) {
				$tr_id = apply_filters( 'translate_object_id',$term->term_id, $taxonomy, false, $lang);

				if (!is_null($tr_id)){
					// not using get_term - unfiltered get_term
					$translated_term = $wpdb->get_row($wpdb->prepare("
                        SELECT * FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} x ON x.term_id = t.term_id WHERE t.term_id = %d AND x.taxonomy = %s", $tr_id, $taxonomy));

					$terms_array[] = $translated_term->term_id;
				}
			}

			if (!is_taxonomy_hierarchical($taxonomy)){
				$terms_array = array_unique( array_map( 'intval', $terms_array ) );
			}

			wp_set_post_terms($tr_post_id, $terms_array, $taxonomy);

			if ($taxonomy == $post_type . 'category') {
				geodir_set_postcat_structure($tr_post_id, $post_type . 'category');
			}
		}
	}
}