Проблема при возврате используемой строки или массива с циклом foreach

Я пытаюсь вернуть строку, которую я могу использовать в функции (программное добавление терминов в WordPress).

Моя функция, которая генерирует мою строку, в основном проходит по метатегам html, которые соответствуют определенным критериям, и выглядит следующим образом:

function getYouTubeTags( $post_id ) {

$video_id = get_post_meta( get_the_ID(), 'rfvi_video_id', true );
$tag_url = "http://www.youtube.com/watch?v=" . $video_id;
$sites_html = file_get_contents($tag_url);
$html = new DOMDocument();
@$html->loadHTML($sites_html);
$meta_og_tag = null;

foreach( $html->getElementsByTagName('meta') as $meta ) {
if( $meta->getAttribute('property')==='og:video:tag' ){
$meta_og_tag = $meta->getAttribute('content');
print_r ($meta_og_tag . ",");
}
}

}

Когда я просто выполню это (getYouTubeTags();), возвращает строку:

supra vs lambo,tt lambo,twin turbo,street race,texas streets,underground racing,supra,turbo supra,1200hp,nitrous,superleggera,gallardo,

В моей функции добавления терминов к сообщению не работает следующее:

function rct_save_post_terms( $post_id ) {

$terms = getYouTubeTags();
wp_set_post_terms( $post_id, $terms, 'post_tag', true );

}

Если я вручную добавлю строку, выведенную из первой функции, она сработает:

function rct_save_post_terms( $post_id ) {

$terms = 'supra vs lambo,tt lambo,twin turbo,street race,texas streets,underground racing,supra,turbo supra,1200hp,nitrous,superleggera,gallardo,';
wp_set_post_terms( $post_id, $terms, 'post_tag', true );

}

Также, согласно WordPress, $terms в wp_set_post_terms: Может быть массивом или строкой, разделенной запятой.

Я знаю, что, должно быть, я упускаю что-то простое здесь, но не могу понять это. Заранее благодарю за помощь!

0

Решение

Так как вы хотите получить эти строки для повторного использования, почему бы не вернуть их:

function getYouTubeTags( $post_id ) {
$out = null;

$video_id = get_post_meta( get_the_ID(), 'rfvi_video_id', true );
$tag_url = "http://www.youtube.com/watch?v=" . $video_id;
$sites_html = file_get_contents($tag_url);
$html = new DOMDocument();
@$html->loadHTML($sites_html);
$meta_og_tag = null;

foreach( $html->getElementsByTagName('meta') as $meta ) {
if( $meta->getAttribute('property')==='og:video:tag' ){
// i seriously doubt this checking i think this should be
// if($meta->getAttribute('property') == 'og:video') {
$meta_og_tag = $meta->getAttribute('content');
// print_r ($meta_og_tag . ",");
$out[] = $meta_og_tag; // gather them inside first
}
}

return implode(',', $out); // return implode comma delimited strings
}

И, наконец, тогда вы можете использовать их:

function rct_save_post_terms( $post_id ) {

$terms = getYouTubeTags(); // strings are in here
wp_set_post_terms( $post_id, $terms, 'post_tag', true );

}
2

Другие решения

Похоже, вы не возвращаете значение в исходной функции. Вам нужно использовать;

return $meta_og_tag;

в конце вашей функции, чтобы вернуть значение обратно в назначенную переменную.

Кроме того, вам нужно добавить строки в конец возвращаемой переменной, используя .=;

$meta_og_tag .= $meta->getAttribute('content');

ИЛИ ЖЕ Вы можете сохранить каждый атрибут в массиве и implode для возвращения;

// inside loop
$meta_og_tag[] = $meta->getAttribute('content');

// outside loop
return implode(', ',$meta_og_tag);

print_r просто отобразит содержимое переменной, а не вернет значение.

Надеюсь это поможет.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector