仅在自动生成Wordpress帖子后才过滤它

时间:2019-10-22 12:40:01

标签: php wordpress

为了符合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个字符的单词。但是,有两个问题:

  • 过滤器始终处于活动状态,因此它也适用于用户生成的块。这意味着,如果出于某种原因在特定帖子中需要不合规的弹头,则无法覆盖它。
  • 显然,即使数据库中确实存在原始数据块,该过滤器也将应用于URL。因此,如果先前发布的帖子中包含无效的子弹(例如/my-little-slug,该过滤器会将其更改为/little-slug),则URL仍会显示/my-little-slug,但链接本身会产生404。我假设这是因为传递的子弹在内部被过滤为/little-slug,并且找不到它。

该站点的帖子存档非常大,因此为所有先前存在的帖子重新生成段塞将不理想,因为在此过程中会断开大量链接。

理想的解决方案是仅在自动生成段塞时才应用过滤器,否则将其忽略,但是似乎没有简单的方法。

我已经审查了类似的问题,唯一看起来似乎很接近的问题是this one。它建议挂在wp_unique_post_slug上,但是该函数具有很多功能,可以确保生成的子弹不会与其他任何碰撞(或与内部WP功能)发生冲突,而且我仍然看不到一种简单的方法来确定子弹是否自动生成(可能是因为我对WP内部没有足够的了解)。

有什么想法吗?

0 个答案:

没有答案