通过 +1 php 更改永久链接的最终编号

Posted

技术标签:

【中文标题】通过 +1 php 更改永久链接的最终编号【英文标题】:change the final number of the permalink by +1 php 【发布时间】:2021-03-25 04:31:07 【问题描述】:

这些天我想知道如何将我的帖子的最终永久链接数更改为 +1,我在网上找到了此代码,但需要有人帮助我更改它吗?

// Get all posts
$query = new WP_Query(array(
    'post_type' => 'post',
    'posts_per_page' => -1,
));

$posts = $query->get_posts();

foreach ($posts as $post) 

    // Get permalink
    $url = $post->post_name;

    // old url
    $old_url = array(
        'http://localhost:8888/site/testpermalink-1/',
        'http://localhost:8888/site/testpermalink-1/',
        'http://localhost:8888/site/testpermalink-7/',
        'http://localhost:8888/site/testpermalink-4/',
        'http://localhost:8888/site/testpermalink-36/',

    );

    // Replacement
    //$replacement = '';

    // Replace url
    //$new_url = str_replace($old_url, $replacement, $url);
    

    // Prepare arguments
    $args = array(
        'ID' => $post->ID,
        'post_name' => $new_url,
    );

    // Update post
    wp_update_post( $args );

我希望将这个列表更改为最后的数字+1,所以编辑后的这个列表应该是:

$new_url = array(
    'http://localhost:8888/site/testpermalink-2/',
    'http://localhost:8888/site/testpermalink-2/',
    'http://localhost:8888/site/testpermalink-8/',
    'http://localhost:8888/site/testpermalink-5/',
    'http://localhost:8888/site/testpermalink-37/',

);

但是,这些固定链接在您更改它们后应该会自动保存。

【问题讨论】:

【参考方案1】:

Permalink 是数据库中的 post_name,有时称为“slug”。

你可以做类似的事情:

foreach ($posts as $post) 
    // split it into pieces, dividing by - character
    $pieces = explode('-', $post->post_name);
    //replace last piece adding 1
    $pieces[array_key_last($pieces)] = (int)$pieces[array_key_last($pieces)] + 1;
    //restore pieces
    $post->post_name = implode('-', $pieces);
    wp_update_post( $post );

警告:array_key_last 函数从 php 7.0 开始存在!

【讨论】:

谢谢Full,但是这样我是不是要修改数据库的所有post_name? 是的,根据您在 WP_Query 的构造函数中输入的内容进行过滤! 啊好的,因为我只是想更改我放入数组中的 post_name 而不是全部,你能给我一个提示吗?非常感谢 您可以尝试根据 post_name 进行过滤,因此类似于 WP_Query(['post_name'=>['testpermalink-1','testpermalink-2']])

以上是关于通过 +1 php 更改永久链接的最终编号的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 PHP 检查 URL 是不是存在?

php 超链接里的参数如何传递数组

更新 WordPress 中的永久链接

如何获得运行 PHP 脚本的链接?

通过jQuery更改链接href [重复]

使用PHP链接MySQL