.htaccess 在WordPress中添加一个具有相同URL结构的分类下的页面

mrfwxfqh  于 2023-01-31  发布在  WordPress
关注(0)|答案(3)|浏览(200)

我正尝试创建一些帖子,以显示在CPT分类页面上,这些页面遵循相同的URL结构。
我有一个帖子类型动物和分类动物类别,为这些页面生成的URL是:

*域名.com/动物
*域名.com/动物类别

然后,我想创建一个标准页面(不属于此帖子类型),其URL为:

*域名.com/动物类别/页面名称

  • 结构上 * 该页面与动物帖子无关,可以是标准页面或帖子类型,这无关紧要。

经过研究和以前的知识,我找不到一个重写规则,以迫使一个页面使用域.com/动物类别之前,页面名称是添加-因为它已经被重写的分类。
也许有一个完全不同的解决方案来实现在分类列表上拥有一个页面(具有这种URL结构)?

ix0qys7i

ix0qys7i1#

我会把你想要的网址如下,

http://example.com/%taxonomy%/page-name

请看一下过滤器_get_page_link。虽然这个过滤器不适合用于主题或插件开发,但你可以用它来完成你的任务。
所以按如下方式使用它,

add_action( 'init', array( $this, 'custom_rewrite_rules' ), 1, 0 ); 
/*
* Rewrite page urls
* adding prefix to page urls
*/
function custom_rewrite_rules()
{
    global $wp_rewrite;
    $wp_rewrite->add_rewrite_tag( "%taxonomy%", '([^/]+)', 'taxonomy=' );
    $wp_rewrite->page_structure = $wp_rewrite->root. '%taxonomy%/%pagename%';        
}

上面的函数将创建所需的url。现在使用过滤器将%taxonomy%更改为您的值。

add_filter( '_get_page_link', 'custom_taxonomy_page_link', 10, 2 );
function custom_taxonomy_page_link( $link, $post_id ) {
    $link = str_replace('%taxonomy%', 'animal-category', $link);
    return $link;
}

这是没有适当的测试,但很少的研究,它可能会帮助你。

cig3rfwq

cig3rfwq2#

我发现最好的方法是使用parse_request钩子。

/**
 * Customize specific post_type parameter and replace it with an existing page
 * 
 * @param $query
 * @return void
*/
function so41567823_customize_query($query) {

    // Check if request is for post_type and equals page name
    if (isset($query->query_vars['animal']) 
        && 'animal-category' === $query->query_vars['animal']) {

        // Set page name
        $query->query_vars['pagename'] = 'animal-category';

        // Unset post_type vars
        unset($query->query_vars['post_type']);
        unset($query->query_vars['animal']);
        unset($query->query_vars['name']);

    }

}

add_action('parse_request', 'so41567823_customize_query');

来源:Custom Rewrite rule to match anything not already matched by WordPress

jckbn6z7

jckbn6z73#

你完全可以做到这一点:)
1.在主题中创建animal-taxonomy模板并将其命名为taxonomy-animal-category.php
1.在循环中,应用条件以获取显示的项目(查询对象),如下所示:

$queried_slug = get_queried_object()->slug;

 if($queried_slug=="page-name"){ 

     // IT IS THE PAGE we have

 } else { 

     if( have_posts() ){

         // Start the Loop.
         while ( have_posts() ) : the_post();

         // End the loop.
         endwhile;

     } else {

          echo "NO animals found :)";

     }

 }

相关问题