评论提交和导航重定向到默认语言

时间:2011-11-14 作者:Giraldi

我正在使用qTranslate 对于多语言;wp-commentnavi 用于注释导航。我的基本permalinks的风格如下:

site.com/     -> for default language
site.com/en/  -> for other language
我需要以下方面的帮助redirecting to the default language:

1. Comment submission

我如何破解这个?我希望提交后显示当前语言。

我找到了这个建议的解决方案:

http://www.qianqin.de/qtranslate/forum/viewtopic.php?f=3&t=2631&p=9037#p8759

..但问题是it doesn\'t direct to the right comment page if there\'s pagination for the comments, 即,它指向第一个评论页面,而不是新评论所在的最后一个页面。

2. Next/Prev comment page links

wp commentnavi似乎使用next_comments_link() &;previous_comments_link() 分别用于下一个/上一个评论页面链接。对于其余的链接(如页面、第一页和最后一页),我可以使用qtrans_convertURL() 函数将其指向当前语言。但我不知道如何为前两个链接硬编码,即下一个/上一个。有人知道吗?

3. Comment Link

我在每条评论中都有一个指向评论链接的链接,使用get_comment_link(). 大概是这样的:

qtrans_convertURL( esc_url( get_comment_link($comment->comment_ID) ) )
用于comment pages two & above, 这些链接可以很好地工作,因为它们指向正确的语言。但是for links that are on page 1, 虽然永久链接是正确的,但一旦打开,它们就会被重定向到默认语言。

例如,在第1页中,一条注释有如下链接:

地点com公司/en/职位类型/职位名称/comment-page-1/#评论-2

打开后,它会重定向到:

地点com/帖子类型/帖子名称/#注释-2

看来comment-page-1 被重定向到较短的permalink,即它去掉了评论页面permalink,但问题是它也去掉了语言permalink。

如何维护当前语言?

有人能帮忙吗?提前欢呼!:)

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

我已经想出了解决我问题的办法。这是我所做的。。。

Note:<这是在考虑帖子,因此评论,在\'Article\' post类型,从而创建永久链接,如下所示:site.com/article/post-name/#comments.

修复问题#1(&#3:

if ( !is_admin() )
    add_filter(\'get_comment_link\', \'my_comment_post_redirect\');

function my_comment_post_redirect($location){

    // Retrieve the URL based on current language up to the post-type (\'article\')
    $currUrl = preg_replace(\'/(.*article\\/).*/\', \'$1\', $_SERVER["HTTP_REFERER"]);

    // Retrieve the URL from the post name to the location of the comment
    // (ie. comment page & number/ID)
    $cmntPage = preg_replace(\'/.*article\\/(.*)/\', \'$1\', $location);

    // Comment page #1 has special redirection, thus...
    $cmntPageNum    = preg_replace(\'/.*comment-page-(.*)\\/.*/\', \'$1\', $cmntPage);
    // If on first comment page...
    if ($cmntPageNum == 1) {
        // ...then get rid of comment page from permalink
        $cmntPage = preg_replace(\'/(.*)comment-page-.*\\/(.*)/\', \'$1$2\', $cmntPage);
    }

    return $currUrl.$cmntPage;
}
UPDATED: 上述代码还将影响back-end 所以我补充道if ( !is_admin() ) 以防止其发生。

对于问题2,我为每个链接创建了一个函数(下一个和上一个):

function def_get_next_comments_link($label, $max) {
    // Get the complete code generated by the function
    // (which includes the <a> tag)
    $navLink = get_next_comments_link($label, $max);
    // Retrieve the base URL up to the post-type \'article\'
    $baseUrl = preg_replace(\'/.*(http:.*article\\/).*/\', \'$1\', $navLink);
    // Replace the base URL with the one for the current language
    return str_replace($baseUrl, qtrans_convertURL($baseUrl), $navLink);
}

function def_get_previous_comments_link($label) {
    // Get the complete code generated by the function
    // (which includes the <a> tag)
    $navLink = get_previous_comments_link($label);
    // Retrieve the base URL up to the post-type \'article\'
    $baseUrl = preg_replace(\'/.*(http:.*article\\/).*/\', \'$1\', $navLink);
    // Replace the base URL with the one for the current language
    return str_replace($baseUrl, qtrans_convertURL($baseUrl), $navLink);
}
然后我调用了链接所在的函数。

这对我有用。:)

结束

相关推荐

Adding Custom Forms

我正在寻找创建一个婚礼网站,将有一个表单页面。其想法是,这是一个RSVP页面,访客将输入他们收到的邀请上的唯一字符串,并将他们带到另一个页面,该页面将包含信息(出席人数、客人数量等),然后将其存储在数据库中,这样我就有了一个完整的客人列表,可以用于以后的用途。我还不太熟悉Wordpress,那么有什么最简单的方法可以让页面包含表单,并且第二个输入页面不会显示在导航中?我应该能够编写php和形成html没有太多的麻烦,只是需要一个起点。