每x小时更改一次特定页面的辅助程序

时间:2022-02-20 作者:JoaMika

是否可以使用wordpress功能重写特定页面(例如,页面ID 123)的slug?

我在某个地方找到了这个,但它不起作用,我也希望简化它,因为我只想更改单个页面的永久链接

function rudr_post_permalink( $url, $post ){
    if( !is_object( $post ) )
        $post = get_post( $post_id );
        
    $replace = $post->post_name;
        
    /* We should use a post ID to make a replacement. It is required if you use urf-8 characters in your URLs */
        
    if( $post->ID == 1 ) 
        $replace = \'hello-planet\';
    if( $post->ID == 12 ) 
        $replace = \'Contacts\';
        
    $url = str_replace($post->post_name, $replace, $url );
    return $url;
}

add_filter( \'post_link\', \'rudr_post_permalink\', \'edit_files\', 2 );
add_filter( \'page_link\', \'rudr_post_permalink\', \'edit_files\', 2 );
add_filter( \'post_type_link\', \'rudr_post_permalink\', \'edit_files\', 2 );
我之所以要这样做,是因为我想每x小时更改一个特定页面的slug。我不想将旧的slug重定向到新的slug。

1 个回复
最合适的回答,由SO网友:Abhik 整理而成

这需要两个步骤。

创建一个实际更改slug的函数(而不是重写它)

  • 在WordPress中计划一个事件,以便每X小时运行该函数

    function wpse402903_schedule_event() {
    
        add_action( \'wpse402903_cron\', \'wpse402903_cron_callback\' );
        
        if ( !wp_next_scheduled(\'wpse402903_cron\') ) {
            //Change 12 to your interval
            wp_schedule_event( time(), 12 * HOUR_IN_SECONDS, \'wpse402903_cron\' );
        }
    }
    add_action( \'init\', \'wpse402903_schedule_event\' );
    
    function wpse402903_cron_callback() {
        
        $post_id = 123; //The ID of the Post
        
        $postID = wp_insert_post( array(
            \'ID\' => $post_id,
            \'post_name\' => \'your-new-slug\', //always use sanitize_title() if this generates dynamically.
        ));
    }  
    
    唯一的缺点是WP Cron。只有当有人访问你的网站时,它才会生效。对于一个流量正常的站点来说,这并不是一个问题。

  • 相关推荐

    Hiding menu on specific pages

    我在某些页面上隐藏顶部菜单时遇到问题。以下是我试图隐藏菜单的网站https://domain.com/cookies-statement/ https://domain.com/privacy-policy/ 看来,来自其他线程的解决方案对我不起作用(或者我做错了什么),请告诉我这是否可能与我的主题一起实现谢谢