保存前修改开机自检辅助信息

时间:2022-02-11 作者:Edegist

我想通过在原来的slug前后添加文本来修改新帖子的slug。然后通过一个钩住save_poststransition_post_status.

add_action( \'save_post\', array( $this, \'action_save_post\' ), 11 );
add_action( \'transition_post_status\', array( $this, \'action_transition_post_status\' ), 9, 3 );
我最初使用的方法如下所示here 其中使用save_post, 然而,虽然这种方法确实正确地更改了网站上的post-slug,但旧的slug仍然通过API发送。

在上面链接的方法中,我尝试更改save_post 挂钩优先级为6 从…起10, 然而,这仍然不起作用。

然后我尝试了一些全新的东西,这是:

function custom_permalink_slug( $original_slug, $slug, $post_id, $post_status, $post_type, $post_parent ) {
    $support_post_type = array( \'deal\' );
    if ( in_array( $post_type, $support_post_type ) ) {
        $rand = \'\';
        $rands = get_the_terms($post_id, \'rand\');
        if (!empty($rands) && !is_wp_error($rands)) {
            $rand = $rands[0]; // Only get first rand if there is more than one
            $rand = sanitize_title( $rand->name );
        }
        if (empty( $rand ) || strpos(  $original_slug, $rand ) !== false) {
            return; // No subtitle or already in slug
        }
        $slug = $rand . \'-\' . $slug . \'-home\';
    }
    return $slug;
}
add_filter( \'pre_wp_unique_post_slug\', \'custom_permalink_slug\', 100, 6 );
这种方法似乎正确地更改了slug,因为它在后期编辑屏幕上显示了新的slug,但实际上它仍然使用旧的slug(可能是因为它不会更改post_name 元字段)。

有没有办法让它正常工作?

1 个回复
SO网友:Sally CJ

在我最初的回答(我已经删除了)中,我建议使用wp_insert_post_data hook (之前运行save_posttransition_post_status), 但是,这个挂钩太早了,尤其是对于新帖子,因此,您无法获得正确的术语(例如,在您的习惯中rand 分类法),用于正在保存的帖子。

然后在我的第二个答案中(检查revisions), 我建议在transition_post_status 吊钩运行。

但不幸的是,这对你仍然不起作用-(

因此,作为一种变通方法(直到有问题的插件被更新,如果有的话..或者直到您创建了自己的发出API请求的插件),那么您可以编辑发出API请求的插件类,即。Better_YOURLS_Actions.

所以在action_save_post()action_transition_post_status() 方法,只需调用更改post段塞的回调/函数,然后调用_generate_post_on_save() 之后一、 e.类似以下内容:

  1. Better_YOURLS_Actions::action_save_post():

    public function action_save_post( $post_id ) {
    
        if ( false === $this->_check_valid_post( $post_id ) ) {
            return;
        }
    
        // Here, call your callback to change the slug:
        your_callback_change_post_slug( $post_id );
    
        $this->_generate_post_on_save( $post_id );
    
    }
    
  2. Better_YOURLS_Actions::action_transition_post_status():

    public function action_transition_post_status( $new_status, $old_status, $post ) {
    
        if ( false === $this->_check_valid_post( $post->ID ) || \'publish\' !== $new_status ) {
            return;
        }
    
        // Here, call your callback to change the slug:
        your_callback_change_post_slug( $post->ID );
    
        $this->_generate_post_on_save( $post->ID );
    
    }
    
如果即使这样做了,也就是编辑了上面的类之后,原始/旧的slug仍然通过API发送,那么您应该忘记插件,自己制作。。

相关推荐

Slug for custom post type

我在我的网站上使用网页和博客帖子。页面获取URL示例。org/%postname%/,并基于Permalink设置,posts获取URL示例。组织/博客/%postname%/。完美的我有一个自定义的帖子类型,由我网站上的另一个组用于他们的网页。在注册post类型时,我为它们提供了一个重写slug:\'rewrite\' => array(\'slug\' => \'ncfpw\'),然而,他们的页面得到了URL示例。组织/博客/ncfpw/%博文名%/我怎样才能摆脱;博客;在他们的URL中?