无法使用foreach循环返回可用的字符串或数组

时间:2014-10-02 00:41:06

标签: php html arrays wordpress domdocument

我正在尝试返回一个我可以在函数中使用的字符串(以编程方式在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可以是数组或逗号分隔的字符串。

我知道我必须在这里遗漏一些简单的东西,但似乎无法弄明白。提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

由于您希望重用这些字符串,为什么不返回这些字符串:

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 );

}

答案 1 :(得分:1)

您似乎没有在原始函数中返回值。你需要使用;

return $meta_og_tag;

在函数末尾,将值返回给指定的变量。

此外,您需要使用.=;

将字符串附加到返回变量的末尾
$meta_og_tag .= $meta->getAttribute('content');

OR 您可以将每个属性保存在数组中,并implode表示返回;

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

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

print_r将简单地回显变量的内容,而不是返回值。

希望这有帮助。