首页 文章

带有分类法的Wordpress自定义帖子永久链接会破坏正常页面

提问于
浏览
1

对于我正在研究的项目,我希望为我的帖子实现以下永久链接结构:

domain.com/special/my-post-slug

特殊是自定义分类法 .

我做了什么:

  • 去设置>永久链接

  • 选择自定义选项并将其转换为:/%specials%/%postname%/

  • 迷上了以下Wordpress钩子,如下所示:

<?php

// in functions.php


add_filter('post_link', 'specials_permalink', 10, 3);
add_filter('post_type_link', 'specials_permalink', 10, 3);

function specials_permalink($permalink, $post_id, $leavename) {

    if (strpos($permalink, '%specials%') === FALSE) {
        return $permalink;
    }

    $post = get_post($post_id);

    if (!$post) {
        return $permalink;
    }

    $terms = wp_get_object_terms($post->ID, 'specials');

    if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) {
        $taxonomy_slug = $terms[0]->slug;
    } else {
        $categories = wp_get_post_categories($post_id->ID, array('fields' => 'all'));

        if(isset($categories[0])) {
            $taxonomy_slug = $categories[0]->slug;
        } else {
            $taxonomy_slug = 'general';
        }
    }

    $permalink = str_replace('%specials%', $taxonomy_slug, $permalink);

    return $permalink;
}

这段代码工作得很好,但是因为我将特价添加到帖子的永久链接结构中,我的页面将不再加载 . 它们都会产生404.只要我从永久链接结构中删除%specials%,它们就会再次运行 .

调试时我发现Wordpress与我的网址匹配如下:

请求:

FR /我的段塞

请求参数:

LANG = FR&特价= MY-蛞蝓

匹配重写规则:

(fr | nl | en)/([^/])/?$

匹配重写查询:

LANG = FR&特价= MY-蛞蝓

但它必须是'pagename'intead''specials' . 我已经尝试重新映射一些网址并添加自定义重写规则和类似的东西,但我找不到任何解决方案 . 最奇怪的部分是,根据WP Codex,永久链接结构仅适用于帖子和存档页面,而不适用于页面 . 链接到链接的我的函数在加载页面时不会被触发 . 但出于某种原因,Wordpress认为我的网页很特别 .

我试图尽可能多地添加信息,但如果缺少某些请求请求 .

1 回答

  • -1

    如果您更改设置 - >永久链接下的永久链接结构,您可以为所有帖子类型更改它(我认为) .

    My suggestion: 默认情况下保留永久链接结构( /%postname%/ )并在过滤器函数中添加帖子类型检查:

    function specials_permalink($permalink, $post_id, $leavename) {
    
        if ( 'post' != get_post_type( $post_id ) ) {
            return $permalink;
        }
    
        // rest of your code
    
    }
    

相关问题