Переопределить шаблон только на конкретной странице

Сначала давайте проясним этот момент.

Это неверно: вы не теряете изменения при обновлении, если они внесены в тему. Они сохраняются. Вы теряете изменения только в том случае, если редактируете файлы напрямую на сервере, чего, разумеется, делать не следует.

Тем не менее, при переопределении шаблонов существует определённый риск: обновление ядра может сделать ваши изменения несовместимыми, и их придётся обновлять. Если вы готовы принять этот риск, то технически вы можете реализовать то, о чём спрашиваете.

Для начала вам нужно каким-то образом определять, находится ли пользователь на главной странице. В случае компонента «только категории» один из способов — проверить searchContext. Когда вы находитесь на странице подкатегории, контекст поиска устанавливается в значение «category». Если контекст поиска отсутствует, значит, вы находитесь на главной странице.

Чтобы передать эту информацию в шаблон, добавьте следующее:

<script type="text/discourse-plugin"
        version="0.8">
  const categoriesOnlyComponent = require('discourse/components/categories-only').default;
  categoriesOnlyComponent.reopen({
    isHomepage: function() {
      return !this.parentView.searchService.contextType
    }.property()
  });
</script>

Это позволяет использовать isHomepage в шаблоне для categories-only. Если контекст поиска отсутствует (то есть вы на главной странице), это возвращает true. В противном случае — false.

Далее вам нужно скопировать стандартный шаблон следующим образом:

<script type='text/x-handlebars'
        data-template-name='components/categories-only'>
  {{#if categories}}
  ... остальная часть шаблона
  {{/if}}
</script>

и использовать добавленное свойство isHomepage. Для этого потребуется хелпер Handlebars {{#if}}. По сути, вам нужно что-то вроде этого:

<script type='text/x-handlebars'
        data-template-name='components/categories-only'>
  {{#if categories}}
    {{#if isHomepage}}
      ... шаблон только для главной страницы
    {{else}}
    ... остальная часть стандартного шаблона, если вы не на главной странице
  {{/if}}
</script>

Теперь в секции isHomepage вы можете использовать всё, что захотите. Вы можете отредактировать её прямо здесь или создать отдельный шаблон для этой секции:

<script type='text/x-handlebars'
        data-template-name='components/categories-only-homepage'>
  <h1>Вы находитесь на главной странице!</h1>
  <p>
    Используйте эту секцию для отображения шаблона компонента «только категории», если пользователь находится на главной странице.
  </p>
</script>

Последний шаг — вызвать этот шаблон как частичный (partial) в шаблоне categories-only внутри секции isHomepage:

<script type='text/x-handlebars'
        data-template-name='components/categories-only'>
  {{#if categories}}
    {{#if isHomepage}}
      {{partial 'components/categories-only-homepage'}}
    {{else}}
    ... остальная часть стандартного шаблона, если вы не на главной странице
  {{/if}}
</script>

В результате при посещении главной страницы вы увидите следующее:

а компонент на страницах подкатегорий останется без изменений.

Это необязательно, но вам может быть интересно также посмотреть:

поскольку это новый рекомендуемый способ работы с темами, позволяющий избежать использования тегов <script>.}