正在搜索整个多站点 post.link returns 当前博客 url
Searching entire multisite post.link returns current blog url
在使用 Timber 的 WordPress 多站点安装中,搜索形式 returns 是正确的 post/pages,但是当使用 {{ post.link }} 时,slug 会以当前博客为前缀 url 而不是页面所在的站点。
示例:
Site 1:
test.com/
有页面:foo URL 测试。com/foo
Site 2
测试.com/2/
正在搜索“foo”
{{post.link}} returns: test.com/2/foo.在 404 中重新开始。
在站点 2 上搜索时,如何获得 foo 的正确 URL?
编辑
解决方案
// search.twig
{% for post in posts %}
{% do fn('switch_to_blog', post.blog_id) %}
<h2>{{post.title}}</h2>
{{post.preview}}
<a href="{{post.link}}">Read More</a>
{% do fn('restore_current_blog') %}
{% endfor %}
// For anyone interested here is the form using Relevanssi plugin
<form role="search" method="get" id="searchform" class="searchform" action="{{site.link}}">
<input type="text" value="{{ function('get_search_query') }}" name="s" id="s" placeholder="Search..." />
<input name="searchblogs" type="hidden" value="39, 0">
<input type="submit" id="searchsubmit" />
</form>
// Note: If only one id is entered into the searchBlogsById form field {{ post.blog_id }} returns null.
// Add a non existing blog id '0' to get around this.
发生这种情况的原因是因为 {{ post.link }}
会在您调用它时立即获取永久链接。 Timber 在幕后使用 get_permalink()
,它始终使用当前站点。
为了完成这项工作,您必须使用 switch_to_blog()
before you use {{ post.link }}
. And after you accessed all the data you need, you can use restore_current_blog()
切换站点才能切换回之前的站点。
{% do fn('switch_to_blog', blog_id) %}
{{ post.link }}
{% do fn('restore_current_blog') %}
显然,您必须知道 post 所在站点的 ID。如果您使用插件在您的多站点中进行搜索,它应该可以让您访问当前的博客 ID。
例如,如果您使用Relevanssi with its Multisite Search功能,则可以通过{{ post.blog_id }}
访问当前博客ID。在那种情况下,它将像这样工作:
{% do fn('switch_to_blog', post.blog_id) %}
{{ post.link }}
{% do fn('restore_current_blog') %}
在使用 Timber 的 WordPress 多站点安装中,搜索形式 returns 是正确的 post/pages,但是当使用 {{ post.link }} 时,slug 会以当前博客为前缀 url 而不是页面所在的站点。
示例:
Site 1:
test.com/
有页面:foo URL 测试。com/foo
Site 2
测试.com/2/
正在搜索“foo”
{{post.link}} returns: test.com/2/foo.在 404 中重新开始。
在站点 2 上搜索时,如何获得 foo 的正确 URL?
编辑
解决方案
// search.twig
{% for post in posts %}
{% do fn('switch_to_blog', post.blog_id) %}
<h2>{{post.title}}</h2>
{{post.preview}}
<a href="{{post.link}}">Read More</a>
{% do fn('restore_current_blog') %}
{% endfor %}
// For anyone interested here is the form using Relevanssi plugin
<form role="search" method="get" id="searchform" class="searchform" action="{{site.link}}">
<input type="text" value="{{ function('get_search_query') }}" name="s" id="s" placeholder="Search..." />
<input name="searchblogs" type="hidden" value="39, 0">
<input type="submit" id="searchsubmit" />
</form>
// Note: If only one id is entered into the searchBlogsById form field {{ post.blog_id }} returns null.
// Add a non existing blog id '0' to get around this.
发生这种情况的原因是因为 {{ post.link }}
会在您调用它时立即获取永久链接。 Timber 在幕后使用 get_permalink()
,它始终使用当前站点。
为了完成这项工作,您必须使用 switch_to_blog()
before you use {{ post.link }}
. And after you accessed all the data you need, you can use restore_current_blog()
切换站点才能切换回之前的站点。
{% do fn('switch_to_blog', blog_id) %}
{{ post.link }}
{% do fn('restore_current_blog') %}
显然,您必须知道 post 所在站点的 ID。如果您使用插件在您的多站点中进行搜索,它应该可以让您访问当前的博客 ID。
例如,如果您使用Relevanssi with its Multisite Search功能,则可以通过{{ post.blog_id }}
访问当前博客ID。在那种情况下,它将像这样工作:
{% do fn('switch_to_blog', post.blog_id) %}
{{ post.link }}
{% do fn('restore_current_blog') %}