删除开机自检格式(类型)辅助文件

时间:2016-08-09 作者:lucian

在尝试删除post格式slug时遇到了问题,因此我可以使用示例。com/video用于视频部分,而不是示例。com/类型/视频。

通常是这样做的:

add_action( \'init\', \'custom_format_permalinks\', 1 );
function custom_format_permalinks() {
   $taxonomy = \'post_format\';
   $post_format_rewrite = array(      \'slug\' => NULL,      );
   add_permastruct( $taxonomy, "%$taxonomy%", $post_format_rewrite );
}
或者简单地说:

add_filter(\'post_format_rewrite_base\', \'post_format_base\');
function post_format_base($slug) {return \'/\';}
这些是其他地方针对这个问题给出的典型答案。他们都完成了任务,除了。。。分页和提要不再工作。

然后我尝试了这条路线。。。

add_filter(\'post_format_rewrite_base\', \'no_format_base_rewrite_rules\');
function no_format_base_rewrite_rules($format_rewrite) { 
$format_rewrite = array();    
$formats = get_post_format_slugs();    
foreach($formats as $format_nicename => $key) {
    $format_rewrite[\'(\'.$format_nicename.\')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$\'] = \'index.php?post_format=$matches[1]&feed=$matches[2]\';
    $format_rewrite[\'(\'.$format_nicename.\')/?([0-9]{1,})/?$\'] = \'index.php?post_format=$matches[1]&paged=$matches[2]\';
    $format_rewrite[\'(\'.$format_nicename.\')/?$\'] = \'index.php?post_format=$matches[1]\';
    }      
return $format_rewrite;
}
事实证明,这种方法可以完美地处理类别、标记或作者,但由于某些原因,这一次它无法完成这项工作。可能有什么问题?

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

上面的回答很好,值得悬赏。有鉴于此,这就是它导致的结果:

add_filter( \'post_format_rewrite_rules\', \'no_format_base_rewrite_rules\' );
function no_format_base_rewrite_rules( $format_rewrite ) {

    $format_rewrite = array(); 
    $formats = get_post_format_slugs();

    foreach($formats as $format_nicename) {
        $format_rewrite[\'(\' . $format_nicename . \')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$\'] = \'index.php?post_format=$matches[1]&feed=$matches[2]\';
        $format_rewrite[\'(\' . $format_nicename . \')/?([0-9]{1,})/?$\'] = \'index.php?post_format=$matches[1]&paged=$matches[2]\';
        $format_rewrite[\'(\' . $format_nicename . \')/?$\'] = \'index.php?post_format=$matches[1]\';
    }

    return $format_rewrite;
}

SO网友:David

在上一个代码示例中,您为post_format_rewrite_base. 它应该是字符串,而不是数组。然而,你的想法是正确的。

您必须注意WordPress为post格式创建的默认重写规则所隐含的所有«路由»:

type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$ => index.php?post_format=$matches[1]&feed=$matches[2]
type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$      => index.php?post_format=$matches[1]&feed=$matches[2]
type/([^/]+)/embed/?$                         => index.php?post_format=$matches[1]&embed=true
type/([^/]+)/page/?([0-9]{1,})/?$             => index.php?post_format=$matches[1]&paged=$matches[2]
type/([^/]+)/?$                               => index.php?post_format=$matches[1] 
使用如何Cortex? 它允许您将路线直接映射到查询参数。下面是一个如何使用它的示例。

<?php

use
    Brain\\Cortex,
    Brain\\Cortex\\Route;


add_action( \'wp_loaded\', function() {

    Cortex::boot();

    $post_format_slugs = get_post_format_slugs();
    $post_format_slugs_pattern = implode( \'|\', $post_format_slugs );
    add_action(
        \'cortex.routes\',
        function ( Route\\RouteCollectionInterface $collection ) use ( $post_format_slugs_pattern ) {
            /**
             * Default route for post format slugs
             *
             * /(standard|aside|chat|gallery|...)
             */
            $collection->addRoute(
                new Route\\QueryRoute(
                    "/{slug:{$post_format_slugs_pattern}}",
                    function( $matches ) {

                        return [
                            \'post_format\' => $matches[ \'slug\' ]
                        ];
                    }
                )
            );
            /**
             * Route for feed endpoints 1
             *
             * /(standard|aside|chat|gallery|...)/feed/(feed/rdf/rss/rss2/atom)
             */
            $collection->addRoute(
                new Route\\QueryRoute(
                    "/{slug:{$post_format_slugs_pattern}}/feed/{feed:feed|rdf|rss|rss2|atom}",
                    function( $matches ) {

                        return [
                            \'post_format\' => $matches[ \'slug\' ],
                            \'feed\'        => $matches[ \'feed\' ]
                        ];
                    }
                )
            );
            /**
             * Route for feed endpoints 2
             *
             * /(standard|aside|chat|gallery|...)/(feed/rdf/rss/rss2/atom)
             */
            $collection->addRoute(
                new Route\\QueryRoute(
                    "/{slug:{$post_format_slugs_pattern}}/{feed:feed|rdf|rss|rss2|atom}",
                    function( $matches ) {

                        return [
                            \'post_format\' => $matches[ \'slug\' ],
                            \'feed\'        => $matches[ \'feed\' ]
                        ];
                    }
                )
            );
            /**
             * Route for embed
             *
             * /(standard|aside|chat|gallery|...)/embed
             */
            $collection->addRoute(
                new Route\\QueryRoute(
                    "/{slug:{$post_format_slugs_pattern}}/embed",
                    function( $matches ) {

                        return [
                            \'post_format\' => $matches[ \'slug\' ],
                            \'embed\'       => TRUE
                        ];
                    }
                )
            );
            /**
             * Route for pagination
             *
             * ^/(standard|aside|chat|gallery|...)/page/(\\d+)$
             */
            $collection->addRoute(
                new Route\\QueryRoute(
                    "/{slug:{$post_format_slugs_pattern}}/page/{page:[0-9]+}",
                    function( $matches ) {

                        return [
                            \'post_format\' => $matches[ \'slug\' ],
                            \'paged\'       => $matches[ \'page\' ]
                        ];
                    }
                )
            );
        }
    );
} );
Cortex的优势在于,您不必刷新重写规则。内部it使用FastRoute 为了匹配模式,您可以使用任何模式语言,FastRoute 提供。Cortext不会覆盖WordPress的内部路由过程,它只会在之前操作,如果没有路由匹配,它会将请求传递给WordPress。

这个例子展示了如何使用皮质的本质。有些路由可能会被合并甚至删除,因为它们只是为了向后兼容(尤其是冗余的馈送路由)。

请记住,您的概念需要重叠的路由,这意味着您将无法创建包含任何post格式术语的页面:标准、旁白、聊天室、图库、链接、图像、引用、状态、视频、音频。

您可能希望实现一种自动检查,以影响独特的段塞后生成:

add_filter( \'wp_unique_post_slug_is_bad_hierarchical_slug\', function( $is_bad, $slug, $post_type, $post_parent ) {
    if ( \'page\' !== $post_type ) 
        return $is_bad;

    return in_array( $slug, get_post_format_slugs() );
} );
另一个优化是只使用当前主题实际支持的post格式slug。但如果主题发生变化,这将使现有URL无效。

如果您不想使用Cortex,原则基本相同,但您必须手动删除默认的post格式规则,并将其替换为custom rewrite rules 这遵循上述路线的模式。请记住,仅在激活挂钩上执行此操作,然后在将重写规则缓存到数据库中时刷新这些规则。

相关推荐