Как я могу показать только определенный блок из поста на первой странице? - PullRequest
0 голосов
/ 11 января 2019

Я создаю пользовательский блок заголовка для темы. Он генерирует специальный макет из трех разных изображений и текста. Когда сообщение содержит этот блок, оно должно показывать этот блок только на первой странице. Я нашел решение, которое работает, но кажется грязным, а также я хотел бы заключить это в плагин блока, а не в тему.

Текущее решение в теме (в content.php):

$content = get_the_content();

if( !is_frontpage() && has_blocks( $content ) ) {

  $blocks = parse_blocks( $content );

  if ( !empty($blocks) && $blocks[0]['blockName'] === 'namespace/block' ) {
    echo $blocks[0]['innerHTML'];
  }
  else {
    the_content();
  }
}

Я также пытался интегрировать его в файл плагина:

function namespace_block_frontpage_blocks($content) {
  if( is_front_page() && has_blocks( $content ) ) {
    $blocks = parse_blocks( $content );
    if ( !empty($blocks) && $blocks[0]['blockName'] === 'namespace/block' ) {
      return $blocks[0]['innerHTML'];
    }
  }
  return $content;
}
add_filter( 'the_content','namespace_block_frontpage_blocks' );

Но это не работает, поскольку has_blocks возвращает false, а parse_blocks ничего не возвращает.

UPDATE

Я нашел решение. Вам нужно дать функции add_filter приоритет (третий параметр):

add_filter( 'the_content','namespace_block_frontpage_blocks', 0 );

1 Ответ

0 голосов
/ 13 января 2019

Это можно сделать с помощью CSS: домашняя страница в Wordpress имеет класс home в своем теге body, поэтому, если класс вашего блока, например, .my_block_1, вы можете записать это в таблицу стилей:

.my_block_1 {
  display: none;
}
.home .my_block_1 {
  display: block;
}

Это будет скрывать этот блок на всех страницах, кроме домашней.

...