#php #wordpress
#php #wordpress
Вопрос:
Это мой код в index.php темы WordPress:
<div id="content">
<?php if (have_posts()) : ?>
<?php $counter = "0"; ?>
<?php while (have_posts()) : the_post(); ?>
<?php
if ($counter % 2) {
$specialprt = "";
} else {
$specialprt = "prt-right";
}
?>
<div class="partial <?php echo $specialprt; ?>" id="post-<?php the_ID(); ?>">
<div class="prt-img">
<?php echo bdw_get_images($post->the_ID, 'medium'); ?>
</div>
<div class="prt-tags">
<?php the_tags(' ', ''); ?>
</div>
<h2 class="prt-title">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a>
</h2>
<span class="prt-small">Posted on <?php the_time('l F jS') ?> by <?php the_author() ?></span>
<p><?php the_excerpt(); ?></p>
<p><?php edit_post_link('Edit', '', ''); ?></p>
</div>
<?php $counter ; ?>
<?php endwhile; ?>
<?php endif; ?>
</div><!-- #content -->
Проблемы:
- Все сообщения имеют одинаковое изображение. Почему?
- Страница загружается очень медленно. Почему?
Кто-нибудь может протянуть руку помощи? 🙂
Спасибо.
Обновить:
С этим у меня лучшие результаты:
<div id="content">
<?php if (have_posts()) : ?>
<?php $counter = "0"; ?>
<?php while (have_posts()) : the_post(); $counter ; ?>
<?php
if ($counter % 2) {
$specialprt = "prt-right";
} else {
$specialprt = "";
}
?>
<div class="partial <?php echo $specialprt; ?>" id="post-<?php the_ID(); ?>">
<div class="prt-img">
<?php
$args = array( 'post_type' => 'attachment', 'numberposts' => 1, 'post_status' => null, 'post_parent' => $post->ID );
$attachments = get_posts($args);
if ($attachments) {
foreach ( $attachments as $attachment ) {
the_attachment_link( $attachment->ID , true, false, false );
}
} else {
echo "<img src="<?php bloginfo('stylesheet_directory'); ?>/images/no-image.jpg" width="250" height="155" />";
}
?>
</div>
<div class="prt-tags">
<?php the_tags(' ', ''); ?>
</div>
<h2 class="prt-title">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a>
</h2>
<span class="prt-small">Posted on <?php the_time('l F jS') ?> by <?php the_author() ?></span>
<p><?php the_excerpt(); ?></p>
<p><?php edit_post_link('Edit', '', ''); ?></p>
</div>
<?php endwhile; ?>
<?php endif; ?>
</div><!-- #content -->
Комментарии:
1. Откуда
$post
берется?2. @deceze: WordPress создает и заполняет эту глобальную (!) переменную после
the_post();
вызова, как часть цикла .3. @deceze: О, и добро пожаловать в клуб 50k-rep!
4. @Bolt Я вижу. Тьфу, WordPress. И спасибо. : o)
Ответ №1:
попробуйте установить счетчик в while следующим образом:
<?php while (have_posts()) : the_post();$counter ;?>
<?php
if ($counter % 2) {
$specialprt = "";
} else {
$specialprt = "prt-right";
}
?>
Комментарии:
1. Я изменил на это. Кажется, теперь страница загружается намного быстрее. Хммм… Пока не вижу смысла, но большое тебе спасибо, чувак! 🙂
Ответ №2:
Сколько изображений
echo "hello world";
возвращаетесь? Если загружается много изображений или всего несколько больших, это может быть причиной медленной загрузки вашей страницы.
Комментарии:
1. Это тестовое эхо вернулось 10 раз, столько раз, сколько статей я вызвал на целевой странице. Я думаю, что проблема в их идентификаторах, а не в количестве возвращенных изображений. Не уверен. Спасибо.
Ответ №3:
Я могу ответить на ваш первый вопрос:
-
$post->the_ID
неверно. Хотя он не распознается как часть$post
объекта, PHP сохраняет уведомления в тайне, поэтому вы не видите никаких ошибок. Вместо этогоbdw_get_images()
просто получает нулевой идентификатор и создает одно и то же «изображение» для каждого поста.Правильное значение для передачи — это либо
$post->ID
, либо callingget_the_ID()
.
Но не со вторым, поскольку я не думаю, что в вашем сообщении достаточно информации, чтобы начать выяснять, что замедляет работу. Попробуйте, возможно, использовать инструменты веб-разработки вашего браузера для анализа запроса и ответа, чтобы увидеть, что происходит.
Комментарии:
1. Я изменил, но ничего не произошло. bdw_get_images () — это функция, которую я нашел в Интернете для извлечения изображений вложений в WordPress. Спасибо.