Есть какие-нибудь идеи, как опубликовать запись в WordPress, содержащую поля отношений ACF?
Является ли iFrame моим лучшим вариантом?
Есть какие-нибудь идеи, как опубликовать запись в WordPress, содержащую поля отношений ACF?
Является ли iFrame моим лучшим вариантом?
Привет, Ричард,
Почти никогда
И не в данном случае.
Не могли бы вы немного подробнее рассказать о вашей потребности и о том, что вы уже пробовали?
Как указано в заголовке вашей темы, вы можете использовать фильтр discourse_publish_format_html, чтобы изменить HTML записи перед её отправкой в Discourse. В документации ACF также есть хорошие примеры использования полей отношений ACF. Их можно применить вместе с фильтром discourse_publish_format_html.
У меня есть два пользовательских типа записей (CPT): Memes и People. У каждого из них есть поле связи ACF с именем meme_person. У мема может быть несколько связанных людей, а также у мема есть текстовое поле для комментария. Имя каждого человека — это заголовок записи People.
Я хочу отображать на Discourse изображение мема, за которым следует комментарий и список связанных людей.
Вот моя текущая попытка, которую я ещё не тестировал, потому что мой цикл foreach — это просто догадка.
Правильный ли это формат?
// при публикации записи в Discourse
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// если есть изображение записи, используем его
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// если запись — мем, получаем информацию из пользовательского поля
if ( 'memes' === $type) {
$comment = get_post_meta($post->ID, '_comment', true);
$people = '';
$meme_person = get_field('meme_person');
if( $meme_person ):
foreach( $meme_person as $people ):
$title = get_the_title( $people->ID );
$people .= $title ? $title . ', ' : '';
endforeach;
endif;
ob_start();
<small>Оригинальная публикация на: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $people ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// иначе возвращаем
ob_start();
the_permalink( $post_id );
$output = ob_get_clean();
return $output;
}
add_filter( 'discourse_publish_format_html', 'rs_custom_publish_format_html', 10, 2 );
Извините за непонятливость, но я не совсем уверен, просите ли вы меня просмотреть весь ваш код или только использование фильтра Discourse. Это правильный формат в том смысле, что фильтр ожидает, что вы измените $output и используете теги шаблона для подстановки значений. Подробнее об этом см. в этой теме:
Спасибо. В той теме указано: Шаблон имеет следующие доступные теги шаблона: {excerpt}, {blogurl}, {author}, {thumbnail}, {featuredimage}.
При первом прочтении я подумал, что это единственные элементы, которые можно передать, поэтому изначально я спрашивал об iFrame. В некоторых других обсуждениях упоминалось, что теперь доступна возможность поиска по Post ID для других мета-полей. (Возможно, об этом стоит упомянуть в теме «Настройка шаблона»)
Ваш первоначальный ответ в этой теме подтвердил возможность поиска по полям отношений, и вы спросили, что я уже пробовал.
Код, который я загрузил, — это то, что у меня есть на данный момент, и я хотел бы узнать ваше мнение по поводу строки foreach, так как именно этот момент в поиске по полям отношений вызывает у меня затруднения. Если у вас нет идей, я поищу elsewhere и вернусь с ответом сюда.
С уважением.
Для тех, кто хочет расширить поле связи ACF, вот что в итоге сработало, когда тип записи (CPT), который я отправляю в Discourse, называется memes и включает поле связи (в виде объекта) под названием meme_person, которое ссылается на другой тип записи people.
function rs_custom_publish_format_html( $output, $post_id ) {
$post = get_post( $post_id );
$type = get_post_type($post_id);
// Если есть изображение, используем его
if ( has_post_thumbnail( $post_id ) ) {
$image = "{thumbnail}<br><br>";
} else {
$image = "";
}
// Если запись является мемом, получаем информацию из пользовательского поля
if ( 'memes' === $post->post_type) {
$comment = get_post_meta($post->ID, 'comment', true);
$peopleout = ' ';
$persons = get_post_meta($post->ID, 'meme_person', true);
if( $persons ):
foreach( $persons as $person ):
$title = get_the_title($person);
$peopleout .= $title . ' ' ;
endforeach;
endif; ?>
<?php ob_start(); ?>
<small>Опубликовано изначально на: {blogurl}</small><br><br>
<?php echo $image ?>
<?php echo $comment ?><br>
<?php echo $peopleout ?>
{excerpt}
<?php
$output = ob_get_clean();
return $output;
}
// В противном случае возвращаем
ob_start();
the_permalink( $post_id );
$output = ob_get_clean();
return $output;
}
add_filter( 'discourse_publish_format_html', 'rs_custom_publish_format_html', 10, 2 );