为了符合SEO惯例,我正在尝试自定义Wordpress为新帖子自动生成的帖子。我在sanitize_title
上使用过滤器取得了一些成功:
add_filter('sanitize_title', 'filtro_slug');
function filtro_slug($slug) {
$p = explode('-', $slug);
$np = array();
foreach ($p as $word) {
if (strlen($word) < 3) {
continue;
}
$np[] = $word;
if (count($np) == 8) break;
}
return implode('-', $np);
}
上面的过滤器工作正常-自动生成的子词限制为8个单词,并且删除了少于3个字符的单词。但是,有两个问题:
/my-little-slug
,该过滤器会将其更改为/little-slug
),则URL仍会显示/my-little-slug
,但链接本身会产生404。我假设这是因为传递的子弹在内部被过滤为/little-slug
,并且找不到它。该站点的帖子存档非常大,因此为所有先前存在的帖子重新生成段塞将不理想,因为在此过程中会断开大量链接。
理想的解决方案是仅在自动生成段塞时才应用过滤器,否则将其忽略,但是似乎没有简单的方法。
我已经审查了类似的问题,唯一看起来似乎很接近的问题是this one。它建议挂在wp_unique_post_slug
上,但是该函数具有很多功能,可以确保生成的子弹不会与其他任何碰撞(或与内部WP功能)发生冲突,而且我仍然看不到一种简单的方法来确定子弹是否自动生成(可能是因为我对WP内部没有足够的了解)。
有什么想法吗?