Функция Wordpress get_post_gallery () не регистрирует галерею поста - PullRequest
2 голосов
/ 28 января 2020

Я хочу извлечь изображения, содержащиеся в блоке галереи, сохраняя их правильный порядок. Поскольку get_children () и get_attached_media () не регистрируются при изменении порядка изображений в wp-admin, я пытаюсь использовать вместо него get_post_gallery ().

Моя проблема в том, что функция возвращает false, несмотря на то, что у публикации есть галерея.

Я попробовал и пример, и простое использование из Кодекса . В настоящее время весь мой сингл. php выглядит так:

<?php
get_header(); //html head etc
if (have_posts()): while (have_posts()) : the_post(); //the loop
    if ( get_post_gallery() ) :
    echo get_post_gallery();
else :
    echo (the_ID() . " has no gallery.");
endif; 
endwhile;
endif;  
?>

…, что приводит к тому, что « ID не имеет галереи» каждый раз.

Однако, Вывод print_r($post->post_content); включает следующее, что подтверждает факт наличия галереи:

<!-- wp:gallery {"ids":[80,81,82]} -->
<figure class="wp-block-gallery columns-3 is-cropped">
        <ul class ="blocks-gallery-grid">
        <!-- … --> 

Я также прилагаю скриншот из wp-admin, чтобы убедиться, что я этого не делаю. неправильно понять, что представляет собой галерея. screenshot

Ответы [ 2 ]

0 голосов
/ 28 января 2020

get_post_gallery() работает только для собственных галерей, которые были созданы в классическом редакторе WYSIWYG. Вы можете найти больше об этом там . Однако, если вы создаете галерею через Гутенберга, она создает весь код HTML вместо редактора галереи classi c, который создает шорткод, подобный следующему: [gallery ids="400097,400052,400051"]. Функции get_post_gallery(), get_post_galleries() и get_post_gallery_images() работают только в галереях classi c, добавленных с помощью собственного шорткода.

0 голосов
/ 28 января 2020

Вы только пытаетесь отобразить блок галереи в отличие от всего контента? Если так, может быть, попробовать это?

  <?php
  get_header(); //html head etc

  if (have_posts()): while (have_posts()) : the_post(); //the loop
    if (has_block('gallery', $post->post_content)) {
      echo 'yes, there is a gallery';
      $post_blocks = parse_blocks($post->post_content);
      foreach ($post_blocks as $post_block){
        if ($post_block['blockName'] == 'core/gallery'){
          echo do_shortcode( $post_block['innerHTML'] );
        }
      }
    }
    // if there is not a gallery block do this
    else {
        echo 'no gallery';
    }
  endwhile;
  endif;
  get_footer();
  ?>

Я получил вдохновение от чтения этого сообщения между прочим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...