某些类别中的帖子的自定义固定链接结构

时间:2018-09-03 作者:vexx

正如标题所说,我想为属于某个类别的帖子创建一个不同的永久链接结构,在我的例子中,名称是“ICO”。我在StackExchange上找到了这段代码,但它实际上对我没有任何帮助,与OPs反馈相反。

代码为:

//Rewrite URLs for "ICO" category
add_filter( \'post_link\', \'custom_permalink\', 10, 3 );

function custom_permalink( $permalink, $post, $leavename ) {
// Get the category for the post
$category = get_the_category($post->ID);
if (  !empty($category) && $category[0]->cat_name == "ICO" ) {
    $cat_name = strtolower($category[0]->cat_name);
    $permalink = trailingslashit( home_url(\'/\'. $cat_name . \'/\' . $post->post_name .\'/\' ) );
}
return $permalink;
}

add_action( \'init\', \'custom_rewrite_rules\' );
function custom_rewrite_rules() {
add_rewrite_rule(
    \'ico/([^/]+)(?:/([0-9]+))?/?$\',
    \'index.php?category_name=ico&name=$matches[1]&page=$matches[2]\',
    \'top\' // The rule position; either \'top\' or \'bottom\' (default).
);
}
主页上的所有此类帖子的URL都没有更改,默认的URL结构是相同的www.site。com/post\\U名称/

然而,我注意到,在一些小部件上,在一个包含该类别帖子的列表中,有些帖子的URL发生了更改,有些没有更改。它们之间没有任何区别,它们有相同的类别。即使我使用该URL/ico/post\\u name/it,如果我删除/ico/并使用默认的永久链接结构,它也可以工作,使其成为同一帖子的重复URL。

我做错了什么?

编辑:我也试过这段代码,效果一样,不起作用

add_filter( \'post_link\', \'custom_permalink\', 10, 3 );
function custom_permalink( $permalink, $post, $leavename ) {
    // Get the categories for the post
    $category = get_the_category($post->ID); 
    if (  !empty($category) && $category[0]->cat_name == "ICO" ) {
        $cat_name = strtolower($category[0]->cat_name);
        $permalink = trailingslashit( home_url(\'/\'. $cat_name . \'/\' . $post->post_name .\'/\' ) );
    }
    return $permalink;
}
add_action(\'generate_rewrite_rules\', \'custom_rewrite_rules\');
function custom_rewrite_rules( $wp_rewrite ) {
    // This rule will will match the post id in %postname%-%post_id% struture
    $new_rules[\'ico/^([^/]*)/?\'] = \'index.php?p=$matches[1]\';
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    return $wp_rewrite;
}

2 个回复
SO网友:honk31

这里有一个搜索所有类别的解决方案,而不仅仅是第一个类别。

add_filter(\'post_link\', \'custom_permalink\', 10, 2);
function custom_permalink( $permalink, $post ) {
    // Get the categories for the post
    $categories = get_the_terms($post->ID, \'category\'); 
    if (!empty($categories)) {
        foreach ($categories as $category) {
            if ($category->cat_name == "ICO") {
                $cat_name = strtolower($category->cat_name);
                $permalink = trailingslashit( home_url(\'/\' . $cat_name . \'/\' . $post->post_name . \'/\' ) );
                break; //we found ico, so exit foreach immediately
            }
        }
    }
    return $permalink;
}

SO网友:vexx

我将主要功能改为:

add_filter( \'post_link\', \'custom_permalink\', 10, 3 );

function custom_permalink( $permalink, $post, $leavename ) {
// Get the category for the post
$category = get_the_category($post->ID);
$cat_id = get_cat_ID ( $category );
if (  !empty($category) && has_category(\'ICO\',$post->ID) ) {
    $permalink = trailingslashit( home_url(\'/ico/\' . $post->post_name .\'/\' ) );
}
return $permalink;
}
这会将URL正确更改为ICO类别中的所有帖子。然而,如果我阅读其中任何一篇文章,它都会返回404,这没有多大意义。

结束

相关推荐

Search Results Customization

无论如何,我可以自定义我的搜索结果吗?我的意思是,举个例子,我有一个财务网页,如果有人在搜索“aapl”,我想显示所有包含“aapl”和“apple”的结果。我该怎么做?提前感谢