Open
Reported for: WPML SEO 2.1.0
Overview of the issue
When using the Rank Math SEO plugin, the primary category set for a product or post in the default language does not synchronize to its translations. This issue persists even if you set the rank_math_primary_product_cat custom field as copy.
Workaround
Please, make sure of having a full backup of your site before proceeding.
- Open theme’s functions.php file.
- Add the following code:
123456789101112131415161718192021222324252627282930
// compsupp-6580: sync primary term and primary product terms for Rank Math
add_filter(
'get_post_metadata'
,
'compsupp6580_filter_the_post_metadata'
, 20, 4);
function
compsupp6580_filter_the_post_metadata(
$value
,
$postId
,
$key
,
$single
)
{
$meta_keys_mapping
=
array
(
'rank_math_primary_category'
=>
'category'
,
'rank_math_primary_product_cat'
=>
'product_cat'
,
);
if
(in_array(
$key
,
array_keys
(
$meta_keys_mapping
), true)) {
remove_filter(
'get_post_metadata'
,
'compsupp6580_filter_the_post_metadata'
, 20);
$value
= get_post_meta(
$postId
,
$key
, true);
add_filter(
'get_post_metadata'
,
'compsupp6580_filter_the_post_metadata'
, 20, 4);
$args
= [
'element_id'
=>
$postId
,
'element_type'
=> get_post_type(
$postId
),
];
$language
= apply_filters(
'wpml_element_language_code'
, false,
$args
);
$value
= apply_filters(
'wpml_object_id'
,
$value
,
$meta_keys_mapping
[
$key
], true,
$language
);
if
(!
$single
) {
$value
= [
$value
];
}
}
return
$value
;
}