Что не так с моим кодом PHP WordPress?

#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 -->
  

Проблемы:

  1. Все сообщения имеют одинаковое изображение. Почему?
  2. Страница загружается очень медленно. Почему?

Кто-нибудь может протянуть руку помощи? 🙂

Спасибо.

Обновить:

С этим у меня лучшие результаты:

 <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:

Я могу ответить на ваш первый вопрос:

  1. $post->the_ID неверно. Хотя он не распознается как часть $post объекта, PHP сохраняет уведомления в тайне, поэтому вы не видите никаких ошибок. Вместо этого bdw_get_images() просто получает нулевой идентификатор и создает одно и то же «изображение» для каждого поста.

    Правильное значение для передачи — это либо $post->ID , либо calling get_the_ID() .

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

Комментарии:

1. Я изменил, но ничего не произошло. bdw_get_images () — это функция, которую я нашел в Интернете для извлечения изображений вложений в WordPress. Спасибо.