Wordpress запрос одного поста по слаг

42

В тот момент, когда я хочу показать одну запись без использования цикла, я использую это:

<?php
$post_id = 54;
$queried_post = get_post($post_id);
echo $queried_post->post_title; ?>

Проблема заключается в том, что при перемещении сайта идентификатор обычно изменяется. Есть ли способ запросить этот пост с помощью slug?

  • 1
    Почему меняются идентификаторы при перемещении сайта? Если вы не перемещаете сайт с помощью функции импорта / экспорта WP (которая не очень надежна, и я бы рекомендовал избегать ее). Если вы просто переносите базу данных, ничего не изменится.
Теги:

3 ответа

69
Лучший ответ

Из WordPress Codex:

<?php
$the_slug = 'my_slug';
$args = array(
  'name'        => $the_slug,
  'post_type'   => 'post',
  'post_status' => 'publish',
  'numberposts' => 1
);
$my_posts = get_posts($args);
if( $my_posts ) :
  echo 'ID on the first post found ' . $my_posts[0]->ID;
endif;
?>

WordPress Codex Получить сообщения

  • 1
    Это показывает идентификатор - $ my_posts [0] -> ID; - а как отобразить содержимое страниц? Я перепробовал все, и ничего не работает!
  • 1
    @JamesWilson начать использовать kint. echo $my_posts[0]->post_content
Показать ещё 3 комментария
40

Как насчет?

<?php
   $queried_post = get_page_by_path('my_slug',OBJECT,'post');
?>
  • 5
    Обратите внимание на дочерние страницы или иерархические пользовательские типы сообщений: my-slug должен стать my-parent-slug/my-slug : codex.wordpress.org/Function_Reference/…
  • 2
    Мой опыт с тех пор, как я прочитал этот пост, поддерживает @Erenor Paz - он действительно может быть красивым и простым, но он становится сложным, когда вы зависите от согласованности пули - которая может измениться просто путем изменения родительского поста ... вздох - возможно, мы может убедить разработчиков WordPress разрешить использование подстановочных знаков в пути, например: get_page_by_path ('* / my_slug');
3

менее дорогостоящий и многоразовый метод

function get_post_id_by_name( $post_name, $post_type = 'post' )
{
    $post_ids = get_posts(array
    (
        'post_name'   => $post_name,
        'post_type'   => $post_type,
        'numberposts' => 1,
        'fields' => 'ids'
    ));

    return array_shift( $post_ids );
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню