在POST保存之前重写POST Slug

时间:2013-07-10 作者:Vit Kos

我需要在帖子中检索一个ACF字段,并在保存到数据库之前更改帖子的slug(permalink)。实现这一目标的方法是什么?我需要在每次创建/编辑post操作时更改slug。

2 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

以下内容更多地被视为概念验证,而不是一个可复制/粘贴的解决方案<话虽如此,你应该这样做:

这个save_post action 每当更新或创建帖子时运行。您可以使用add_action.

因此,您的案例必须如下所示:

// initial hook
add_action( \'save_post\', \'wpse105926_save_post_callback\' );

function wpse105926_save_post_callback( $post_id ) {

    // verify post is not a revision
    if ( ! wp_is_post_revision( $post_id ) ) {

        // unhook this function to prevent infinite looping
        remove_action( \'save_post\', \'wpse105926_save_post_callback\' );

        // update the post slug
        wp_update_post( array(
            \'ID\' => $post_id,
            \'post_name\' => \'some-new-slug\' // do your thing here
        ));

        // re-hook this function
        add_action( \'save_post\', \'wpse105926_save_post_callback\' );

    }
}
上面可能有点混乱的是,从它内部取消和重新调出函数。这是必需的,因为我们调用wp_update_post 更新slug,从而触发save_post 要再次运行的操作。

另外,如果希望WP根据帖子标题自动生成新的slug,只需传递一个空字符串:

wp_update_post( array(
    \'ID\' => $post_id,
    \'post_name\' => \'\' // slug will be generated by WP based on post title
));

SO网友:IvanRF

我需要同样的东西,只是为了后期创作。

我实现了solution here (这一个已准备好复制/粘贴)。

只需删除检查两个日期是否相等的行,它也会为编辑操作更新slug。然而,我不建议这样做,因为它会改变帖子的URL,这对SEO不好,尤其是断开的链接(404)。

结束

相关推荐

Link to all posts page?

因此,我在默认情况下隐藏了我的管理栏,因为它很难看,而不是编写一堆if语句,因此WP admin面板中的某些元素只对登录的用户显示,到目前为止还不错。我遇到的问题是“所有帖子”屏幕,url是wp admin/edit。php,但这给了我一个404错误。这样可以使用户进入新的post屏幕。<?php global $user_login; get_currentuserinfo(); if ($user