Функция Wordpress для получения термина или объекта публикации по идентификатору


В настоящее время для различения объектов post и term я использую короткий фрагмент кода:

$object = get_post($id);

if ( ! $object ) {
    $object = get_term($id);
}
print_r($object);

Существует ли функция, которая возвращает объект post или объект term с заданным идентификатором без использования приведенного выше оператора if?

С наилучшими пожеланиями, Дэн.

PS, мне это нужно для вызовов WP ajax.

Author: Daniel, 2018-05-12

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;
}
 0
Author: Jacob Peattie, 2018-05-12 12:12:29