Функция Wordpress для получения термина или объекта публикации по идентификатору
В настоящее время для различения объектов post и term я использую короткий фрагмент кода:
$object = get_post($id);
if ( ! $object ) {
$object = get_term($id);
}
print_r($object);
Существует ли функция, которая возвращает объект post или объект term с заданным идентификатором без использования приведенного выше оператора if?
С наилучшими пожеланиями, Дэн.
PS, мне это нужно для вызовов WP ajax.
1 answers
get_queried_object()
получит запрашиваемую в данный момент "вещь" из основного запроса в качестве объекта. Это может быть WP_Post
, WP_Term
, или WP_Post_Type
(для архивов типа post) объект, но я не думаю, что это то, о чем вы просите, и не было бы полезно в AJAX.
Кроме этого, нет функции именно для того, что вы просите, но это, вероятно, было бы нецелесообразно в любом случае. Термины и записи хранятся в отдельных таблицах, поэтому легко могут быть термины и записи с одинаковым идентификатором. Уверен, что ты можно было бы получить сообщение, если оно существует, или вернуться к термину, как в вашем существующем коде, но что, если вы ожидаете термин для данного идентификатора, но есть версия настройщика с тем же идентификатором? Это не особенно полезно и, вероятно, не то, что вы просили. Не говоря уже о том, что WP_Term
и WP_Post
обладают разными свойствами и представляют совершенно разные вещи, то есть они не взаимозаменяемы, что делает полезность такой функции сомнительной.
Если вы отправляете идентификатор через AJAX и хотите соответствующий объект в функции обратного вызова, тогда лучшим подходом было бы также отправить ожидаемый тип объекта через AJAX и получить соответствующую функцию на основе этого.
$id = $_GET['id'];
$object_type = $_GET['object_type'];
switch ( $object_type ) {
case 'post':
$object = get_post( $id );
break;
case 'term':
$object = get_term( $id );
break;
}