以数组形式获取标记,将标记转换为字符串,然后用破折号替换空格

时间:2017-10-19 作者:sk03

我正在尝试从帖子中获取标记(只有一个标记),然后用该标记名创建一个新变量,但用破折号替换空格。

这是a到目前为止所拥有的,但我无法让它显示标记的值(带空格和不带空格),而不是“数组”。在下面的代码中,我现在只想让它显示为带破折号。

        $posttags = get_the_tags();
        $newname = str_replace(\' \', \'-\', $posttags);
        if ($posttags) {
          foreach ($posttags as $tag){
            echo \'Post by: <a href="/meet-the-team/employees/\'. $newname .\'/">\'. $newname .\'</a>\';
          }
        }

2 个回复
SO网友:Tom J Nowell

让我们使用您的问题标题将其分开:

将标记获取为数组,将标记转换为字符串,然后用破折号替换空格

以数组形式获取标记

get_the_tags 是正确的函数,您现在有两件事之一:

术语对象数组(标记是标记分类法中的术语)

  • false, 此帖子上没有标签WP_Error 对象,出现了一些问题,所以我们需要检查这些情况,毕竟如果我们假设返回了标签,但没有,会发生什么?我们必须告诉它将发生什么或未定义的事情将发生,这可能是任何事情,可能是500个错误

    因此,让我们更新第一位代码:

    $tags = get_the_tags();
    
    if ( is_wp_error( $tags ) ) {
        return; // there was an error
    }
    if ( false === $tags ) {
        return; // there were no tags on this post
    }
    // now we can do stuff with the tags
    
    将标记转换为字符串,现在我们有了一个标记数组。您提到应该只有1个标记,但谁知道哪些插件可能会添加自己的标记,所以让我们确保您的代码正确处理这些标记:

    foreach ( $tags as $tag ) {
        // do something with our tag
        break; // exit after the first one
    }
    
    用破折号替换空格$tag 是一个WP_Term 对象,可以使用术语slug$tag->name, 已经有URL友好版本

    然而,为什么要麻烦呢?这有一个函数!我们可以将其替换为:

    echo \'Post by: <a href="/meet-the-team/employees/\'. $newname .\'/">\'. $newname .\'</a>\';
    
    使用:

    $url = get_term_link( $tag, \'tags\' );
    echo \'Post by: <a href="\'.esc_url( $url ).\'">\'.esc_html( $tag->name ).\'</a>\';
    
    注意,我添加了转义。逃跑很重要,可以防止大多数黑客攻击。尽管它是反黑客的超级大国,但它几乎从未应用于WordPress代码:(

  • SO网友:WebElaine

    如果您使用str_replace 在一个数组上,您将返回一个数组。所以$newname 是一个数组。

    您可能想str_replace 在您的foreach 相反,循环-这样它可以在每个单独的项目上工作,然后显示单独的项目。

    或者,如果你继续使用str_replace 在完整阵列上,您需要更改foreach 循环到:foreach($newname as $tag) 和echo$tag$newname.

    结束

    相关推荐

    Set post tags using tag ID

    我想将post标记设置为新值。有没有办法使用tag ID 这样做?这个wp_set_post_tags 仅接受tag name 或array of tag names.<?php wp_set_post_tags( $post_ID, $tags, $append ) ?> 我想使用ID 我不想为获取完整的标记对象进行额外调用。