POST永久链接中的自定义分类

时间:2012-06-28 作者:Totomobile

可以将其用作帖子的永久链接:

/%category%/%postname%/
但假设我创建了一个名为“艺术家”的分类法。我想将此用于我的帖子:

/%artist%/%postname%/
我知道分类法允许您列出它们的术语:

/%artist%/%someartist%/
但这不是我想要的。我想修改帖子URL,而不是分类法URL。

我正在我的博客上尝试这个,但它不起作用。这是可以在Wordpress中完成的吗?

3 个回复
SO网友:David

假设调用了自定义分类法artist (并且不覆盖rewrite 参数)您可以使用重写标记%artist%. WordPress实现了几乎所有在post permalinks中使用这些重写标记的功能。只需要进行一些小的调整。

首先,您需要使用post_link 用于替换请求结构中的自定义»标记«的筛选器:

/**
 * replace the \'%artist%\' tag with the first 
 * term slug in the artist taxonomy
 * 
 * @wp-hook post_link
 * @param string $permalink
 * @param WP_Post $post
 * @return string
 */
function wpse_56769_post_link( $permalink, $post ) {

    $default_term = \'no_artist\';
    $terms = wp_get_post_terms( $post->ID, \'artist\' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) )
        $term = current( $terms )->slug;
    else
        $term = $default_term;

    $permalink = str_replace( \'%artist%\', $term, $permalink );

    return $permalink;
}
add_filter( \'post_link\', \'wpse_56769_post_link\', 10, 2 );
此函数(wpse_56769_post_link):

定义默认术语slug(no_artist) 如果贴子在艺术家分类法中没有指定术语,则将其用作回退,获取艺术家分类法的第一个指定术语(按字母顺序),替换标记%artist% 用这个词的鼻涕虫现在,进入菜单设置→ Permalinks,选择选项»Custom Structure«并写入:/%artist%/%postname%/.

因此,post permalink应该如下所示:

Using the first term as URL slug

现在,post permalinks包含了第一个艺术家术语slug,让我们看看路由。

更新永久链接(路由)

您会注意到,永久链接已正确解析为单个帖子。不幸的是,页面永久链接被破坏。

要解决此问题,不一定需要修改重写规则。我们唯一需要做的就是改变WP_Rewrite. 财产WP_Rewrite::use_verbose_page_link 需要设置为TRUE. (这是WP_Rewrite 使用时%category%%author% 标记作为post permalinks的基础。)

/**
 * set WP_Rewrite::use_verbose_page_rules to TRUE if %artist%
 * is used as the first rewrite tag in post permalinks
 * 
 * @wp-hook do_parse_request
 * @wp-hook page_rewrite_rules
 * @global $wp_rewrite
 * @param mixed $pass_through (Unused)
 * @return mixed
 */
function wpse_56769_rewrite_verbose_page_rules( $pass_through = NULL ) {

    $permastruct = $GLOBALS[ \'wp_rewrite\' ]->permalink_structure;
    $permastruct = trim( $permastruct, \'/%\' );
    if ( 0 !== strpos( $permastruct, \'artist%\' ) )
        return $pass_through;

    $GLOBALS[ \'wp_rewrite\' ]->use_verbose_page_rules = TRUE;
    return $pass_through;
}
add_filter( \'page_rewrite_rules\', \'wpse_56769_rewrite_verbose_page_rules\', PHP_INT_MAX );
add_filter( \'do_parse_request\',  \'wpse_56769_rewrite_verbose_page_rules\', PHP_INT_MAX );
必须在两个点更改状态:do_parse_request 因为WP::parse_request() 请求此状态和page_rewrite_rules 当重写规则生成时。

现在,路由已修复,页面永久链接工作正常。(再次冲洗permalinks后。)

处理no_artist 伪术语no_artist 事情:如果这个职位真的没有分配给artist 在分类法中,permalink被解析为以下查询变量:

name   => \'sample_post\'
artist => \'no_artist\'
page   => \'\'
这将导致404,因为该术语不存在。作为岗位的name 应该是唯一的我们可以删除artist 上的查询变量request 过滤器:

/**
 * check for existing artist and set query to 404 if necessary
 *
 * @wp-hook parse_query
 * @param array $request_vars
 * @return array
 */
function wpse_56769_request_vars( $request_vars ) {

    if ( ! isset( $request_vars[ \'artist\' ] ) )
        return $request_vars;

    if ( ! isset( $request_vars[ \'name\' ] ) )
        return $request_vars;

    if ( \'no_artist\' == $request_vars[ \'artist\' ] )
        unset( $request_vars[ \'artist\' ] );

    return $request_vars;
}
add_filter( \'request\', \'wpse_56769_request_vars\' );
有了这个过滤器http://wordpress.dev/no_artist/sample-post/ 将正确找到。

SO网友:Aleks

我想这就是你想要的:Custom Post Type Permalinks

此插件允许您编辑自定义帖子类型的永久链接结构。

要安装此插件,请执行以下操作:

下载自定义帖子类型permalinks。将文件压缩到您的计算机您也可以转到wordpress中的“插件”菜单,然后单击“添加新内容”。然后通过搜索“Custom Post Type Permalinks”找到该插件,并单击install按钮进行安装。

一个新项目将出现在wordpress管理员左侧的菜单中。在这里,您可以根据需要更改设置(分类名称等)。

此外,我的网站目前有以下永久链接结构“site.com/star/aristname/”,然后列出这位艺术家的所有帖子或关于这位艺术家的页面/帖子。

如果您正在查找此内容,可以为您的自定义帖子类型创建存档页。Wordpress将自动采用这种结构。有关如何创建自己的存档页面的更多信息,请访问here. (如果你真的在找这个,如果你愿意,我可以更详细地解释)

SO网友:Oleg Butuzov

当我想将url链接到类别(在任何url结构中)时,我在url重写结构中设置了一个术语列表,但在我的例子中没有太多术语。。。

结果有点像重写规则键

publications/(annual-reports|articles|books|policy-briefs)/([^/]+).html?$ 
和规则值

index.php?post_type=publication&category_publication=$matches[1]&publication=$matches[2]&paged=1
所有东西都是用rewrite_rules_array 滤器

您可以在中看到结果http://unu.edu/publications

结束

相关推荐

使用wp_INSERT_TERM()函数添加术语时,缺少Term_id和Term_Taxonomy_id

检查线路;list($term\\u id,$taxonomy\\u id)=$result在下面的代码段中。(朝向底部)。为什么我缺少术语\\u id&;当我回显$taxonomy\\u id的值时?它们不应该由wp\\u插入它们来填充吗? $term_name = \'Uncategorized\'; $term_slug = sanitize_title(\'Uncategorized\', \'Default category slug\'); $term_