WordPress文章PostID不连续的解决方法

Wordpress 每天学 来源:原创 7个月前 (03-20) 278次浏览

网上(特指百度)要不就是没用的方法要不就是上古时期的方法,好不容易找到一个靠谱点的

宇宙级解决方案

这个方法是利用PostName实现的ID连续,首先要进入 设置->固定链接 把固定链接改为 /%postname%.html ,当然你要根据自己的需求修改

让所有旧文章ID连续

如果要使老文章自动设置別名,在模板的functions.php里面加入下面的代码

function Bing_post_id_continuous_query()
{
    set_time_limit(0);
    remove_action('publish_post', 'Bing_post_id_continuous');
    query_posts('posts_per_page=-1');
    $arr = array();
    while (have_posts()) {
        the_post();
        $post_id = $GLOBALS['post']->ID;
        $arr[] = $post_id;
    }
    wp_reset_query();
    $arr = array_reverse($arr);
    $i = 1;
    foreach ($arr as $post_id) {
        wp_update_post(array(
            'ID' => $post_id,
            'post_name' => $i++
        ));
    }
}

if ($_GET['post_id_continuous_query'] == 'yes' && current_user_can('level_10')) add_action('init', 'Bing_post_id_continuous_query');

加好之后就可以通过访问 你的网址/?post_id_continuous_query=yes 来给每一篇文章自动生成別名,之后这些代码为了安全可以删了。

新文章ID连续

然后还要给新的文章也自动设置別名,同样在funcionts.php里面加入

function Bing_post_id_continuous( $id, $post, $update ){
if( $update || $post->post_status != 'publish' ) return;
$action = 'save_post_post';
$func = 'Bing_post_id_continuous';
remove_action( $action, $func, 10 );
wp_update_post( array(
'ID' => $id,
'post_name' => wp_count_posts()->publish + 1
));
add_action( $action, $func, 10, 3 );
}
add_action( 'save_post_post', 'Bing_post_id_continuous', 10, 3 );

就可以实现新帖自动设置別名了,就这么简单可以实现文章ID连续,但我其实也不太喜欢这个方法,这个问题遗留了至少8年了,老外都喜欢用別名,我们的中文是不用来別名一般都用数字ID。

上面这个方法实测没卵用,我改了一下,并且准备加入到自己的主题中:

//postname连续

if (_mtx('sequential_postname')) {

    function post_id_continuous($id, $post)
    {
        if ($post->post_status != 'publish') return;
        $action = 'publish_post';
        $func = 'post_id_continuous';
        remove_action($action, $func, 10);
        wp_update_post(array(
            'ID' => $id,
            'post_name' => wp_count_posts()->publish + 1
        ));
        add_action($action, $func, 10, 3);
    }
    add_action('publish_post', 'post_id_continuous', 10, 3);
}

 

旧文章地址不失效的情况下设置別名

如果博客开了很久了,帖子比较多也有一个解决方案,不会让原本的链接失效的解决方案!进入数据库输入下面这段指令可以让所有的文章的別名变成自己的ID,配合上面的自动设置新帖別名就很完美了

update wp_posts set post_name=ID where post_status='publish' and post_type='post';

可能的问题

这句话有点绕口,如果要使老文章自动设置ID为別名,用最后一段的代码是根据现在的ID设置別名,但是新帖自增的別名是根据帖子的总数+1设置的,这两个可能会导致別名冲突,所以如果是老站,暂时没想出来什么好方法,新站就方便多了。


每天学 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:WordPress文章PostID不连续的解决方法
赞(1)
分享到: 更多 (0)