从CPT编辑页面引用时,更新自定义分类术语后重定向不正确

时间:2012-05-06 作者:Evan Mattson

我的自定义帖子类型“stats”有一个自定义分类法“stat groups”(非层次)。

我在编辑页面上为所选统计组术语创建了一个链接。

单击链接并提交对该术语的更改后,wp重定向到编辑标签。php,但查询字符串中没有post类型。。。因此,编辑页面显示正确,但在导航中,它显示的是扩展的“帖子”部分,而不是我的自定义帖子类型。

这尤其令人恼火,因为我为自定义分类法的编辑页面提供了自定义css,因为添加了字段,当查询字符串中没有包含post类型时,这会把一切都搞糟

我猜这是因为http\\U推荐人?

我不知道如何让它在保存自定义分类术语时重定向回自定义帖子编辑页面。

我尝试将查询字符串中的重定向url传递到术语的编辑页面,从$\\u GET var中捕获它,将其放入隐藏的输入值中,然后从$\\u POST on save中捕获它,并尝试在保存后使用它进行重定向,但它不起作用。我已经尝试在那里使用wp\\u redirect和redirect canonical。

因此,我真正想做的是,在保存对自定义税务术语的编辑后,将其重定向回其所在帖子的引用统计数据编辑页面。如果我不能这样做,我至少希望它重定向到正确的编辑标签页面。

任何人感谢您提前提供的帮助!:)

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

明白了!

我不确定罪魁祸首到底是什么,但我做了一些事情,结果它起了作用。

以下是我使用的代码摘要:

我根据中的代码定义了这个助手函数redirect_cannonical()

function get_current_url() {

    $current_url  = is_ssl() ? \'https://\' : \'http://\';
    $current_url .= $_SERVER[\'HTTP_HOST\'];
    $current_url .= $_SERVER[\'REQUEST_URI\'];

    return $current_url;
}
在我的CPT元数据库中,底部有一个指向编辑标签的链接。自定义分类术语的php页面:

echo \'<p><a class="sg_edit_link" href="\' . admin_url( \'edit-tags.php?action=edit&taxonomy=stat_groups&post_type=stats&tag_ID=\'.$args[\'id\'] ).\'&redirect=\'.urlencode( get_current_url() ).\'">Edit \' . $args[\'name\'] . \' Stat Group</a></p>\';
这是一个动态创建的元盒(每个术语一个),因此$args 是传递给add_meta_box() 作用

因此,链接将当前url作为查询字符串中的“重定向”参数传递。

在“自定义税务术语编辑”页面上,表单中添加了字段。我添加这些行来捕获重定向url,如果有,则将其添加到表单中:

if ( isset($_GET[\'redirect\']) ) {
    echo \'<input type="hidden" name="redirect" value="\'.esc_url($_GET[\'redirect\']).\'">\';
}
现在,在保存字段时将发布这些信息,因此在保存额外字段数据的函数中,我在更新选项后添加了以下内容:

if (isset($_POST[\'redirect\'])) {

    $redirect = esc_url_raw( $_POST[\'redirect\'] );

    wp_redirect( $redirect );
    exit;

}
我遗漏了一件可能是导致它不起作用的唯一原因,那就是exit; 在最后一个代码块中。这一点被指出是非常重要的,应包括在法典中wp_redirect() 但我想我错过了:/

这是我的解决方案,我很想知道是否有一种更优雅的方法可以做到这一点,尽管这并不太糟糕。

结束

相关推荐

Disable redirect canonical

我正试图阻止index.php 从重定向到文件index.html 我在主目录中也有。我想要index.html 在WordPress站点完成之前的几天里,这是访问者将看到的页面,我将通过添加index.php 到url;但是WordPress重定向index.php 到index.html 这意味着我只能查看页面和帖子,而不能查看主页。我试过remove_filter(\'template_redirect\', \'redirect_canonical\'); 进入functions.php 但它不起