换出作为多个页面的父页面的页面

时间:2020-03-18 作者:fudge

我的网站上有一个特定的页面,我正在尝试一些太复杂而无法备份的更改(页面模板更改、自定义字段等)。

我使用插件复制了页面,并对这个新页面进行了所有更改,包括添加到子页面的所有链接。我重命名了旧页的URL段塞(现在是备份),然后将重复页重命名为旧页的原始URL。当我点击链接时,我一直得到404的链接,直到我意识到子页面有一个指向旧页面的父段塞。下面是我要说的:

现场。com/护肤治疗/皮肤/尤文德姆-voluma-2/This is what it was originally

现场。com/旧皮肤护理/皮肤/尤文德姆-voluma-2/All the pages were automatically changed to this

如何修复此问题?我能以某种方式把旧页换成新页吗?

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

Make a database backup first!

您可以在主题的functions.php 并执行一次。

喜欢https://your.site/?old_parent=100&new_parent=200

其中,100是旧父页Id,200是要为旧父页的子页设置的新父页Id。

设置您自己的ID!(id是URL中的一个数字值,例如,当您编辑帖子\\页面时http://yoursite.test/wp-admin/post.php?post=54&action=edit - 页码id为54)

function custom_replace_parent() {

    $old_parent_post_id = intval( $_GET[\'old_parent\'] );
    $new_parent_post_id = intval( $_GET[\'new_parent\'] );

    if( $old_parent_post_id  < 1 ) {return;}

    $child_pages = get_posts(
        array(
            \'post_type\'      => \'page\',
            \'post_status\'    => \'any\',
            \'posts_per_page\' => -1,
            \'post_parent\'    => $old_parent_post_id,
        )
    );

    foreach ( $child_pages as $child_page ) {

        wp_update_post(
            array(
                \'ID\'          => $child_page->ID,
                \'post_parent\' => $new_parent_post_id,
            )
        );

    }

}

add_action( \'init\', \'custom_replace_parent\' );
如果遇到PHP最大执行时间,只需刷新一个页面(如果此单亲页面有数千个子页面,则可能会出现这种情况)。

Important! Remove this code out of your site\'s functions.php after you\'ll finish

And again, make a backup first!

这段代码的思想是放置,然后使用示例中的GET参数替换刷新站点,但使用页面ID,而不是this code MUST be removed from site.

If you will not remove this code after you\'ve done fixing it may make harm. as really anyone who might guess that this code is installed on your site will be able to perform these actions, ruining your website!

相关推荐

Rename a slug label

在我的自定义帖子类型中,有一个自定义分类法,它具有常用的标题、Slug和Description字段。我希望最终用户不理解slug的用途,在我的情况下,它需要是一个语言代码,例如en\\u GB,所以我只想将slug标签重命名为“语言代码”。太长,读不下去了我可以重命名自定义分类法的slug标签吗?