Позиционирование get_template_part () - PullRequest
0 голосов
/ 06 марта 2020

Я создал шорткод для отображения значков социальных сетей в используемой теме (Divi). Значки социальных сетей содержатся в шаблоне PHP, который называется "social_icons. php".

. Я использую эту функцию:

  function social_icons_shortcode() {
    $social_icons = get_template_part( 'includes/social_icons' );
      echo $social_icons; 
}
add_shortcode('social-icons', 'social_icons_shortcode');

. Здесь указаны social_icons. php template:

<div id="custom-social-icons">
    <?php if( get_field('facebook', 'option') ): ?>
        <a class="icon facebook" href="<?php echo get_field( 'facebook', 'option' ) ?>" title="Follow us on Facebook"></a>
    <?php endif; ?>
    <?php if( get_field('twitter', 'option') ): ?>
    <a class="icon twitter" href="<?php echo get_field( 'twitter', 'option' ) ?>" title="Follow us on Twitter"></a>
    <?php endif; ?>
    <?php if( get_field('instagram', 'option') ): ?>
    <a class="icon instagram" href="<?php echo get_field( 'instagram', 'option' ) ?>" title="Follow us on Instagram"></a>
    <?php endif; ?>
    <?php if( get_field('youtube', 'option') ): ?>
    <a class="icon youtube" href="<?php echo get_field( 'youtube', 'option' ) ?>" title="Follow us on YouTube"></a>
    <?php endif; ?>
    <?php if( get_field('linkedin', 'option') ): ?>
    <a class="icon linkedin" href="<?php echo get_field( 'linkedin', 'option' ) ?>" title="Find us on Linkedin"></a>
    <?php endif; ?>
</div>

Шорткод работает отлично, когда я хочу показать социальные значки в нижнем колонтитуле темы, но когда я пытаюсь поместить их в тело (например, страницу контактов), они отображение абсолютного значения в верхнем левом углу страницы. Смотрите снимок экрана: https://share.getcloudapp.com/8LuJkODx

Я не могу понять, почему это происходит - что-то не так с get_template_part ()?

1 Ответ

1 голос
/ 06 марта 2020

Ааа .. Я вижу, в чем проблема. Вам нужно return значение, а не echo.

function social_icons_shortcode() {
    $social_icons = get_template_part( 'includes/social_icons' );
    return $social_icons; 
}
add_shortcode('social-icons', 'social_icons_shortcode');

Другая вещь, которая может произойти, потому что, как работает get_template_part(), вам может понадобиться использовать ob_buffer.

function social_icons_shortcode() {
      ob_start();
      get_template_part( 'includes/social_icons' );
      return ob_get_clean(); 
}
add_shortcode('social-icons', 'social_icons_shortcode');
...