是否可以在wp\\U posts表中更改post ID而不引起问题?
No it is not. 如果您更改了帖子ID,则必须完成并修复其他事项:
post元键/值对将不再具有正确的ID,分类法中的所有术语(如类别和标记)将不再附加到post,任何指向页面的nav菜单链接都将断开,在该页面上包含附件,任何缓存机制都需要刷新,否则会出现问题significant 工作量大,不值得这么麻烦
一般来说,如果您需要更改帖子的帖子ID,这是一个很大的警告,说明您所做的事情不正确,还有更简单的解决方案有待找到
为了解决这个问题,我目前正在使用一个开关来检测页面所使用的语言,然后将ID分配给一个变量。有了这些信息,我就可以使用这个ID转义URL。
如果这样做的全部目的是switch
我强烈建议不要这样做,不仅因为这是不明智的,而且因为它行不通。多篇文章不能有相同的ID。但也因为它是不必要的,并且可以使用一些基本的PHP使其变得更好
例如,您可以将case
共同声明:
switch($language) {
case "en_us":
case "de_de":
$downloads = 356;
break;
case "pt_pt": $downloads = 93; break;
case "it_it": $downloads = 76; break;
case "pt_br": $downloads = 59; break;
case "fr_be": $downloads = 596; break;
case "nl_be":
case "es_es":
case "fr_fr":
case "es_mx":
case "pl_pl":
$downloads = 545;
break;
}
甚至使用
default:
案例:
switch($language) {
case "en_us":
case "de_de":
$downloads = 356;
break;
case "pt_pt": $downloads = 93; break;
case "it_it": $downloads = 76; break;
case "pt_br": $downloads = 59; break;
case "fr_be": $downloads = 596; break;
default:
$downloads = 545;
break;
}
或者最好使用数组:
$languages = [
"en_us" => 356,
"de_de" => 356,
"pt_pt" => 93,
"it_it" => 76,
"pt_br" => 59,
"fr_be" => 596,
];
$downloads = 545;
if ( !empty( $languages[$language])) {
$downloads = $languages[$language];
}
但这仍然给我们留下了基本的反模式:
The magic number problem
该代码具有硬编码的post ID。如果您决定迁移、替换、导入等,代码将被破坏,因为ID可能不同。
Instead, use post slugs, 理想情况下,包含该语言。或者更好的是,使用MLP已经提供的API和功能,让插件为您完成工作