it-swarm.com.ru

использование the_permalink для вывода href в <li>

Я пытаюсь создать меню, которое автоматически заполняется из пользовательского типа сообщения, и у меня возникли некоторые проблемы с его правильной настройкой. Если бы кто-то мог указать мне правильное направление, я был бы очень признателен. Вот код PHP в <img src> извлекает нужную информацию и вставляет ее в нужное место, the_permalink извлекает правильный URL, но затем помещает URL-адрес над тегом <li> вместо href.

<ul class="product-menu">
              <?php
              $products = new WP_Query(
                $args = array(
                  'post_type' => 'product',
                  'post_status' => 'publish',
                )
              );
              while ( $products->have_posts() ) {
                $products->the_post();
                $post_thumbnail_id = get_post_thumbnail_id();
                $post_thumbnail_url = wp_get_attachment_url( $post_thumbnail_id );
                echo 
                '<li>
                  <a href="' . the_permalink() . '">
                    <img src="' . $post_thumbnail_url . '" alt="' . get_the_title() . '">
                  </a>
                </li>';
              } 
              /* Restore original Post Data */
              wp_reset_postdata();?>
              </ul>
2
mrben522

the_permalink() печатает url немедленно и ничего не возвращает, вы должны использовать функцию get_the_permalink(), которая возвращает url текущей записи.

5
ScheRas

Вы использовали the_permalink, который выводит эхо, поэтому вы отражаете эхо. Вы хотите подать в суд на get_the_permalink, чтобы вернуть URL, который затем может быть выведен в код. Большинство функций WordPress, начинающихся с the_, напрямую выводятся на страницу, а те, у которых get_, возвращают результат.

Это должно работать для вас. Я также использовал the_post_thumbnail, чтобы вывести уменьшенное изображение в формате WordPress и обновить проблему с помощью гиперссылки.

<ul class="product-menu">
    <?php

    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
    )

    $products = new WP_Query($args);

    while ( $products->have_posts() ) {
        $products->the_post();

        echo '<li><a href="' . get_the_permalink() . '">';

        // check if the post has a Post Thumbnail assigned to it.
        if ( has_post_thumbnail() ) {
            the_post_thumbnail();
        }

        echo '</a></li>';
    } 
    /* Restore original Post Data */
    wp_reset_postdata();

    ?>
</ul>
3
Chris Morris