Почему PHP / WordPress отображает здесь пустую строку? - PullRequest
2 голосов
/ 05 ноября 2011

У меня есть очень простой цикл для страницы архива на веб-сайте:

<?php get_header(); ?>
<?php if(have_posts()): ?>
<div id="thumbs-container">
<?php while(have_posts()): the_post(); if(has_post_thumbnail()): ?>
    <div <?php post_class('thumb'); ?>>
        <a href="<?php the_permalink(); ?>">
        <?php the_post_thumbnail('full',array('alt'=>get_the_title(),'title'=>null)); ?>
        <div class="thumb-desc">
            <h2><?php the_title(); ?></h2>
            <p><?php echo get_post_meta($post->ID,'Description',true); ?></p>
        </div>
        </a>
    </div>
<?php endif; endwhile; ?>
</div>
<?php else: get_template_part('no-results'); endif; ?> // <--problem here?
<?php get_footer(); ?>

А вот шаблон no-results во всей полноте :

<h2>Nothing here yet.</h2>
<p>Please <a href="<?php bloginfo('url'); ?>/">return to the home page</a>.</p>

Поскольку архив в настоящее время пуст, содержимое no-results.php отображается, как и ожидалось.Взгляд на исходный код страницы ничего не показывает (даже пробел) между <h2> и содержащим его <div>, однако <h2> опускается на одну строку вниз на странице, а на консоли разработчика отображается пустой текстовый узел вышеэто:

A string of spaces above an H2 element

Небрежный пробел - это одно;пробелы, которые на самом деле влияют на мой макет, это другое.Я что-то упускаю, что может быть причиной этого?

Ответы [ 3 ]

5 голосов
/ 05 ноября 2011

Случайно ли вы использовали Блокнот для создания шаблона no-results?

Я предполагаю, что ваш шаблон начинается с метки порядка байтов UTF-8 . Блокнот вставляет его по умолчанию при сохранении файла с кодировкой UTF-8. Некоторые другие текстовые редакторы также делают это, но обычно имеют возможность отключить его.

Используйте редактор, который не вставляет спецификацию, или, учитывая, что ваш шаблон не содержит никаких символов, отличных от ASCII, просто сохраните его как ASCII / ANSI.

0 голосов
/ 05 ноября 2011
   <?php get_header(); ?>
    <?php if(have_posts()): ?>
    <div id="thumbs-container"><-- this will echoed if there is content
    <?php while(have_posts()): the_post(); if(has_post_thumbnail()): ?>
        <div <?php post_class('thumb'); ?>>
            <a href="<?php the_permalink(); ?>">
            <?php the_post_thumbnail('full',array('alt'=>get_the_title(),'title'=>null)); ?>
            <div class="thumb-desc">
                <h2><?php the_title(); ?></h2>
                <p><?php echo get_post_meta($post->ID,'Description',true); ?></p>
            </div>
            </a>
        </div> <-- here should be the closing tag of thumbs-container
    <?php endif; endwhile; ?>
    </div> <-- the closing tag will be always echoed better moved up
    <?php else: get_template_part('no-results'); endif; ?> // <--problem here?
    <?php get_footer(); ?>

я думаю, вам следует переместить закрывающий тег, который испортил вашу разметку

0 голосов
/ 05 ноября 2011

Похоже, вы близки, если перед циклом while?

<?php endif; endwhile; ?> Кажется неправильным, потому что вы открываете кулак if и секунду while, поэтому вы должны закрыть их в самом последнем первом порядке, например <?php endwhile; endif; ?>

...