Как получить ID текущей записи пользовательского типа записи в цикле, используя шаблон single-{custom type}.php?

22 нояб. 2013 г., 15:59:14
Просмотры: 42.2K
Голосов: 2

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

Поэтому я попытался проверить, совпадает ли постоянная ссылка для записи внутри цикла, и если она совпадает, я получу ID текущей записи в цикле.

Вот код, который я попробовал

Сначала пытаюсь получить постоянную ссылку снаружи, чтобы проверить её внутри цикла

$permalink = get_permalink();

Теперь у меня есть постоянная ссылка текущей записи, и я хочу получить ID текущей записи

if($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post();
        if(the_permalink()==$permalink){
            echo get_the_ID();
        }else{
            echo "не найдено";
        }
    endwhile;
    wp_reset_postdata();
endif;

Я попробовал это в single-{custom-post-name}.php и получаю не найдено. Может кто-нибудь подсказать способ получить ID текущей записи в этом шаблоне?

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

Поскольку вы используете get_permalink() вне цикла, вам, возможно, нужно передать ID записи. В противном случае функция вернет false, и позже, когда вы будете проходить по циклу, автоматически получите "не найдено!"

sri sri
22 нояб. 2013 г. 16:09:16

Также объяснение более широкой причины, почему вы это делаете, может помочь получить больше ответов и, возможно, более качественных.

sri sri
22 нояб. 2013 г. 16:10:42
Все ответы на вопрос 1
1

Итак, у вас есть два цикла: основной цикл и второй, использующий $query.

Вы хотите сравнить, совпадает ли текущий пост (внутри цикла) с обрабатываемым постом внутри цикла $query в какой-то момент.

Я правильно понял?

Вместо проверки постоянных ссылок я бы предложил проверить ID.

Итак, в первом цикле вы создаете переменную с ID текущего поста:

$current_post_id = $post->ID;

а во втором цикле просто сравниваете:

if($query->have_posts()) : while ($query->have_posts()) : $query->the_post();

    if( $current_post_id === $post->ID ) {
         echo $post->ID; 
    } else {
        echo "not found";
    }

endwhile; wp_reset_postdata(); endif;

Не уверен, что это то, что вам нужно, дайте нам знать.

PS: Стоит добавить более специфичное имя для вашего запроса, чтобы избежать конфликтов имен с плагинами или чем-то еще, например $my_prefix_query

22 нояб. 2013 г. 16:37:41
Комментарии

Вы правы, я искал то же самое. Раньше я не знал, как использовать стандартный цикл have post. Я думал, что он будет получать все записи. Но когда я попробовал, то понял, что он получает текущую запись. Поэтому я использовал get_the_id(), присвоил значение переменной и затем использовал её в цикле запроса. Спасибо, @Simon

sun sun
23 нояб. 2013 г. 14:53:34