如何在固定链接中使用第一个标签

时间:2012-11-11 作者:Hasan

我试过了%tag% 在永久链接中,但它不会在永久链接中显示标记名。。。我想做的是在永久链接中使用第一个标记名。那么,怎么做呢?谢谢

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

使用add_rewrite_tag() 注册占位符并筛选post_link 插入正确的标记。使用get_the_tags() 获取帖子的标签。

我在项目中使用的插件示例:

<?php
/**
 * Plugin Name: T5 Tag as rewrite tag
 * Description: Use <code>%tag%</code> in permalinks.
 * Version:     2012.09.02
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * Licence:     MIT
 * License URI: http://opensource.org/licenses/MIT
 */

add_action( \'init\', array ( \'T5_Rewrite_Tag_Tag\', \'init\' ) );

/**
 * Adds \'%tag%\' as rewrite tag (placeholder) for permalinks.
 */
class T5_Rewrite_Tag_Tag
{
    /**
     * Add tag and register \'post_link\' filter.
     *
     * @wp-hook init
     * @return  void
     */
    public static function init()
    {
        add_rewrite_tag( \'%tag%\', \'([^/]+)\' );
        add_filter( \'post_link\', array( __CLASS__, \'filter_post_link\' ) , 10, 2 );
    }

    /**
     * Parse post link and replace the placeholder.
     *
     * @wp-hook post_link
     * @param   string $link
     * @param   object $post
     * @return  string
     */
    public static function filter_post_link( $link, $post )
    {
        static $cache = array (); // Don\'t repeat yourself.

        if ( isset ( $cache[ $post->ID ] ) )
            return $cache[ $post->ID ];

        if ( FALSE === strpos( $link, \'%tag%\' ) )
        {
            $cache[ $post->ID ] = $link;
            return $link;
        }

        $tags = get_the_tags( $post->ID );

        if ( ! $tags )
        {
            $cache[ $post->ID ] = str_replace( \'%tag%\', \'tag\', $link );
            return $cache[ $post->ID ];
        }

        $first              = current( (array) $tags );
        $cache[ $post->ID ] = str_replace( \'%tag%\', $first->slug, $link );

        return $cache[ $post->ID ];
    }
}

结束

相关推荐

widgetlogic and permalinks

我试图使用widgetlogic在某些页面上有条件地显示菜单。每个菜单都使用如下标记is_page(array(\"Page Name\", \"Page Name 2\" ...)), 在我尝试更改permalinks之前,它一直工作得很好(因此所有菜单都会从各自的页面中消失)。我做错什么了吗?是否有解决方法?