WordPress: получение заголовка сообщения с идентификатором

1

у меня естьACF relationship field называетсяvan_range_type .

van_range_type показывает сообщения изrangecustom post type . В этом типе сообщений у меня есть три сообщения со следующими идентификаторами

  • Диапазон 1 (ID: 116 )
  • Диапазон 2 (ID: 163 )
  • Диапазон 3 (ID: 164 )

У меня есть еще один тип сообщения, который называетсяcampers . В этом типе сообщенияvan_range_type должен быть выбран изrelationship field (идея состоит в том, что кемпер принадлежит к диапазону).

В одном из моих постов вcampers , Я определил поле отношений какRange 2 . в этом посте для кемперов я не пытаюсь получить название диапазона. Т.е. я пытаюсь присвоить переменную с именем$range_name который в этом сценарии должен иметь значениеRange 2 .

Для этого я сделал следующее:

$range_type_id = get_field('van_range_type');
var_dump($range_type_id); // this returns 163

if($range_type_id):
  $range_name = get_the_title($range_type_id);
endif;

var_dump($range_name); // this returns an empty string

Тем не мение,$range_name возвращает пустую строку? Я уже встречал подобные вопросы (например, этот ), но этот подход мне не подходит?

  • 0
    С первого взгляда не понимаю, почему это не должно работать. Ваш таможенный пост типа использует стандартный WP title функции, да? (Это было бы маловероятно, но его можно было бы отключить с помощью supports в настройке CPT, а Range X можно было бы сохранить в другом настраиваемом поле.)
  • 0
    Что произойдет, если вы измените формат возврата в конфигурации поля ACF с идентификатора на публикацию? Если вы затем сбросите то, что вернуло get_field, вы увидите, что title установлено так, как должно быть в возвращенном экземпляре WP_Post?
  • 0
    Привет, @CBroe. Когда я меняю формат возврата поля relationship id на object а затем на var_dump($range_name) , я вижу, что post_title возвращает правильный title . Не знаете, почему его поведение отличается, когда используется формат id ?
Теги:
advanced-custom-fields custom-post-type
CodeFix

1 ответ

0

попробуйте с этим

if($range_type_id != 0):
  $range_name = get_the_title($range_type_id);
endif;

или

if($range_type_id != ''):
  $range_name = get_the_title($range_type_id);
endif;
Поделиться
Источник
  • 0
    В качестве общего примечания, если код внутри блока if представляет собой одну строку, вам не нужно использовать скобки или : endif , вы можете просто выполнить if (condition) // single line code;
  • 1
    @Buttered_Toast, вы правы, их можно опустить, но это не рекомендуется стандартами PSR (см. Php-fig.org/psr/psr-12 ), потому что это может привести к ошибкам, если вы добавите одну строку в условие, например
  • 0
    Привет, Драшти, я могу подтвердить, я пробовал оба из вышеперечисленных, и ни один из них не работал. Когда я делаю var_dump($range_name) , он в обоих случаях string(0) ""
  • 0
    Привет, @Freddy, ты уверен, что вставил заголовки во все сообщения? а заголовки хранятся в поле заголовка постов по умолчанию? также проверьте этот print_r (get_post ($ range_type_id));
  • 0
    @DrashtiRajpura - Ага, могу подтвердить, что у всех есть титулы. В моем relationship van_range_type настоящее время return_format установлено значение id . Когда я изменил это на object и сделал var_dump , он напечатал правильный заголовок в post_title . Когда я запускаю print_r( get_post($range_type_id) ); он ничего не печатает
  • 0
    Хорошо, тогда вы можете получить объект вместо идентификатора и получить из него post_title? @Фредди

Другие вопросы

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум