发布页面显示子页面而不更改 URL

Posted

技术标签:

【中文标题】发布页面显示子页面而不更改 URL【英文标题】:Post page displaying sub page without URL change 【发布时间】:2021-09-23 15:12:05 【问题描述】:

我正在为一家公司开发一个关于 WordPress 的网站,我遇到了以下问题。这是结构:

部分:

fruits

类别(子部分):

red, yellow, blue, orange

项目(子小节):

apples, oranges, lemons, blueberries

Fruits 基于站点的Posts 部分(旁边有一个小图钉)。 The category plays into the URL for that page, so when an item is selected it would look something like:

food.com/fruits/red/apples/

类别页面有它自己的页面,带有一些视觉导航和关于该类别的简介。选择果实并导航到其中一个类别时,页面显示水果的内容而不是构建自身的类别页面。

例如,网址如下所示:

food.com/fruits/red/

但它正在显示页面

food.com/fruits/red/apples/

不更改 URL。

到目前为止,我解决此问题的唯一方法是不选择类别,但是随后我遇到了该水果页面的 URL 如下所示的问题:

food.com/fruits/colour/apples/

到目前为止,我还没有找到有关此主题的任何信息,我们将不胜感激。

在下图中,您可以看到下一步显示错误的页面,但是在两种情况下,第二页的永久链接是相同的。

visual of this problem

编辑:

archive-fruits.blade.php

@include('page')

page.blade.php

@php $iterator = 0 @endphp
@extends('layouts.app')

@section('content')
  @while(have_posts()) @php the_post() @endphp
    @if ($flexible_content)
      @foreach ($flexible_content as $block)
        @if ($block->block_type == 'markets_slider')
          @include('partials.markets-slider')
        @elseif ($block->block_type == 'static_content')
          @include('partials.static-content')
        @elseif ($block->block_type == 'expandable_content')
          @include('partials.expandable-content')
        @elseif ($block->block_type == 'image_+_text_listings')
          @include('partials.image-plus-text-listings')
        @elseif ($block->block_type == 'farmers_markets_list')
          @include('partials.farmers-markets-list')
        @elseif ($block->block_type == 'fruits_list')
          @include('partials.fruits-list')
        @elseif ($block->block_type == 'tabbed_content')
          @include('partials.tabbed-content')
        @endif
      @endforeach
    @endif

  @endwhile
@endsection

布局:app.blade.php

<!doctype html>
<html !! get_language_attributes() !!>
  @include('partials.head')
  <body @php body_class() @endphp>
    @php do_action('get_header') @endphp
    @include('partials.header')
    <div class="wrap container" role="document">
      <div class="content">
        <main class="main">
          @yield('content')
        </main>
        @if (App\display_sidebar())
          <aside class="sidebar">
            @include('partials.sidebar')
          </aside>
        @endif
      </div>
    </div>
    @php do_action('get_footer') @endphp
    @include('partials.footer')
    @php wp_footer() @endphp
  </body>
</html>

【问题讨论】:

【参考方案1】:

我不知道您是如何创建 CPT 的,但它使用默认页面模板作为存档模板。这意味着您不会在类别存档中拥有帖子列表,而只有内容。 您必须在 archive-fruits.blade.php 中创建一个存档模板,替换已经存在的那一行。

您可以查看任何 Wordpress 主题的 archive.php 文件中的存档模板是如何制作的,但这是自定义帖子类型,因此可能存在差异(例如事实名为 archive-fruits)。没有什么是 quick search on Google 无法解决的。我建议您先阅读the Codex,然后阅读一些指南。

【讨论】:

【参考方案2】:

我真的不明白你的工作方式。抱歉,我无法发表评论,但我还没有足够的声誉。这个“水果”是自定义帖子类型还是“帖子”功能本身? “不改变网址”是什么意思?

您可以在WordPress的设置中更改帖子的永久链接,跟随Settings&gt;Permalink,并在URL中添加类别,如您所见here。

【讨论】:

对不起,我知道这很混乱! Fruit 是一种自定义后置类型。我将添加一张图片,希望对解释有所帮助。 我看到了照片。据我所知,您希望第一个按钮(红色),即自定义帖子类型的类别,打开该类别的存档。你说实际发生的是第一个按钮(红色)直接打开它包含的帖子。或者它可能会打开直接填充类别内容的类别存档。也许第一个按钮根本不代表类别存档...我们需要更多详细信息,例如您如何创建自定义帖子类型以及您的代码是什么。 好的,我再次阅读了主题并看到了照片。现在一切都清楚了。类别存档页面似乎以某种奇怪的方式工作。我们需要此类存档模板的代码:也许它旨在直接显示帖子的内容而不是它们的列表。此类模板应在文件夹中的某处命名为 archive-fruits.php,但如果您创建了 CPT,则可能是 Wordpress 正在使用主题的 default archive 作为后备。 好的,谢谢!我不知道如何解释这个问题,但就是这样——我的档案页面由于某种原因没有正确显示。存档页面本身只显示@include('page'),而在page 中有很多if (some_layout_type) include (some_partial)。剩下的就是一个兔子洞,在这里发布的信息太多了,但非常感谢你,这为我指明了正确的方向。 让我们至少开始添加存档页面和“页面”页面的代码。可能是您需要创建一个新的存档页面或从 Wordpress 的默认文件中复制它。编辑您的问题。我仍然不明白您所指的存档页面是默认的 archive.php 还是像 archive-fruites.php 这样的自定义存档页面。

以上是关于发布页面显示子页面而不更改 URL的主要内容,如果未能解决你的问题,请参考以下文章

更改浏览器中的 URL 而不使用 JavaScript 加载新页面

更改/重命名我的 URL 中的子页面

.htaccess:重定向而不更改 url

单击后关闭悬停子菜单而不刷新页面

如果 url 中的所有更改都是哈希,如何强制页面重新加载?

如何在不更改当前 URL 的情况下显示错误页面