Я прошерстил Кодекс, не смог заставить работать get_page_by_title() и очень удивлен, что для этой задачи не существует стандартной функции WP.
Мне нужно получить идентификатор любого поста/cpt или страницы, используя слаг заголовка поста/страницы. В идеале я ищу следующее:
get_post_ID_by_title('My post title', 'customposttype');
Что я должен делать?
Как вы использовали
get_page_by_title
и является ли иерархический тип пользовательского сообщения, я не думаю, чтоget_page
(вызванныйget_page_by_title
) будет работать для неиерархических типов.Да, рассматриваемый пользовательский тип записи не является иерархическим.
Игнорируйте предыдущий комментарий об иерархии, это не имеет значения, как вы звонили
get_page_by_title
?До сих пор мне удавалось избегать запросов к БД, так как я предпочитаю использовать стандартные функции WP. Это действительно единственный способ добиться того, что мне нужно?
Опубликованный код в значительной степени является прямой копией
get_page_by_title
функции, основное отличие здесь в том, что он будет работать для неиерархических типов, поэтому его стоит иметь в своей коллекции функций.@ t31os Я никогда не говорил, что это мое, я только добавил к нему песнь $post_type, и да, это пойдет в мою коллекцию.
Я ни в чем тебя не обвинял, приятель, во всяком случае, я поддерживаю твой ответ.. 😉 Ты уже получил мой +1.. 🙂
@ t31os Я знаю, это просто плохая шутка 🙂
Это
null
действительно должно бытьOBJECT
для ясности. Но да, он, по сути, добавлял тип сообщения в качестве типа вывода, опуская тип вывода.Вместо
$query->the_post()
which изменяет цикл и прерывает всеget_the_xxx
функции после него, лучше использовать: if ($query->have_posts()) { return $query->posts[0]->ID; } еще { вернуть 0; }вы можете использовать эту функцию, которая прыгает через Google «получить пост по заголовку»
Вам не хватает параметра функции. Добавьте null для второго необязательного параметра $output, и эта функция должна работать для вас.
Я только что столкнулся с той же проблемой, и добавление нуля исправило ее для меня.
Я склонен избегать прямых запросов к БД. Вместо этого я использую
WP_Query
объект для разбора вещей для себя.По сути, это функция, которую я использую в одной из своих тем для получения поста на основе заданного слага:
Это создаст запрос с использованием WP API для получения сообщения определенного типа с заданным слагом, запустит обычные функции цикла для результата и вернет идентификатор сообщения. Вы также можете использовать его, чтобы вернуть весь пост, немного изменив функцию, но это на ваше усмотрение.
Этому уже несколько лет, но оно все еще всплывает при поиске в Google. Итак, вот простой способ сделать это:
или
Затем просто используйте объект $page, чтобы получить идентификатор:
В настоящее время (WP > 4.9.2) вы можете найти свой «любой» данный пост/страницу и т. д. по заголовку/слагу следующим образом: