如何从 Wordpress 页面/帖子中获取所有标签作为简码列表?

Posted

技术标签:

【中文标题】如何从 Wordpress 页面/帖子中获取所有标签作为简码列表?【英文标题】:How to get all tags from Wordpress page/post as a list in shortcode? 【发布时间】:2018-04-16 17:22:27 【问题描述】:

在每个页面和每个帖子的末尾,我想将标签输出为简码列表。

很遗憾,我对 php 了解不多,但是懂的人一定能用下面的代码纠正我的错误。

提前谢谢你!

<?php // functions.php | get tags
function addTag( $classes = '' ) 

    if( is_page() ) 
        $tags = get_the_tags(); // tags
        if(!empty($tags))
        
            foreach( $tags as $tag ) 
                $tagOutput[] = '<li>' . $tag->name . '</li>';
            
        
    
    return $tags;


add_shortcode('tags', 'addTag');

【问题讨论】:

这篇文章能满足你的需要吗? ***.com/questions/28202455/… 我试过了,它返回空 【参考方案1】:

该方法需要返回一个字符串才能打印任何标记。

“短代码函数应返回用于替换短代码的文本。” https://codex.wordpress.org/Function_Reference/add_shortcode

function getTagList($classes = '') 
    global $post;
    $tags = get_the_tags($post->ID);
    $tagOutput = [];

    if (!empty($tags)) 
        array_push($tagOutput, '<ul class="tag-list '.$classes.'">');
        foreach($tags as $tag) 
            array_push($tagOutput, '<li>'.$tag->name.'</li>');
        
        array_push($tagOutput, '</ul>');
    

    return implode('', $tagOutput);


add_shortcode('tagsList', 'getTagList');

编辑:删除了对 is_page 的检查,因为如果没有,get_the_tags 将简单地返回空

【讨论】:

谢谢你的回答!我现在明白了,这就是他之前返回“Array”的原因。我将您的代码用作简码 [tagsList] 并且输出为空。想不通:/ 我认为这与@janh 提到的 is_page 检查有关! 只在帖子中添加这个更容易吗? get_the_tags() 将默认为循环中的当前帖子(它应该是,因为在 the_content 过滤器上解析短代码)。但是,如有必要,请确保在函数中使用之前添加global $post; 成功了! “全球 $post;”不见了...非常感谢!【参考方案2】:

请注意,除非您更改了某些内容,否则页面没有标签。

也就是说,这应该可行。它还在标签周围添加了&lt;ul&gt;,但您可以更改它,我相信您会看到在哪里。我使用了is_singular,但你可能根本没有这种情况,除非你在自定义帖子类型中添加[tags],并且不希望在那里输出。 我假设您想添加更多修改,否则 webdevdani 关于使用 the_tags 的建议可能更简单。

// get tags 
function addTag( $classes = '' ) 
    if( is_singular("post") || is_singular("page") ) 
        $tags = get_the_tags();
        if(is_array($tags) && !empty($tags)) 
            $tagOutput = array("<ul>");
            foreach( $tags as $tag ) 
                $tagOutput[] = '<li>' . $tag->name . '</li>';
            
            $tagOutput[] = "</ul>";
            return implode("", $tagOutput);
        
    
    return "";

add_shortcode('tags', 'addTag');

【讨论】:

以上是关于如何从 Wordpress 页面/帖子中获取所有标签作为简码列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Wordpress管理员替换帖子和页面的所有外部/预览

如何在 Gatsby 中获取所有 Wordpress 帖子和显示标签

Wordpress - 我如何从其他自定义帖子中获取_categories?

Wordpress ACF 字段如何从自定义帖子类型中获取选项

Wordpress 如何使用 WP_REST_Posts_Controller 获取特定的帖子数据

如何使用 JQuery.ajax 从每个 WordPress 帖子中获取缩略图附件?