正在搜索整个多站点 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') %}