对所有帖子类型使用相同的基于日期的固定链接结构

时间:2014-07-02 作者:Simon Blackbourn

是否有一种方法可以对站点上的所有(非层次)帖子类型(包括帖子和自定义帖子类型)使用完全相同的基于日期的永久链接结构?

我希望所有的帖子类型都有这样的格式/%year%/%monthnum%/%day%/%postname%/, 因此,帖子类型不会出现在URL中。

使用默认的自定义post-type-permalink结构,以下代码成功地从permalink中删除了post-type(有可能导致帖子名称冲突的问题,但我可以接受),但我不知道如何设置permalink以使用日期结构。

class simons_permalinks {

    function __construct() {

        add_action( \'pre_get_posts\',  array( $this, \'pre_remove_slug\' ) );
        add_filter( \'post_type_link\', array( $this, \'remove_slug\' ), 10, 3 );

    }

    function pre_remove_slug( $query ) {

        if ( ! $query->is_main_query() )
            return;

        if ( 2 != count( $query->query ) or !isset( $query->query[ \'page\' ] ) )
            return;

        $types = array( \'page\', \'post\', \'feature\', \'opinion\' );

        if ( ! empty( $query->query[ \'name\' ] ) ) {
            $query->set( \'post_type\', $types );
        }

    }

    function remove_slug( $link, $post, $name ) {

        $types = array( \'post\', \'feature\', \'opinion\' );

        if ( \'post\' != $post->post_type and in_array( $post->post_type, $types ) and \'publish\' == $post->post_status ) {
            $pto = get_post_type_object( $post->post_type );
            $link = str_replace( \'/\' . $pto->rewrite[ \'slug\' ] . \'/\', \'/\', $link );
        }

    return $link;

    }

} // class
谢谢Simon

1 个回复
SO网友:John Blackbourn

您需要在您的post_link 回调:

$link = str_replace(
  \'/\' . $pto->rewrite[ \'slug\' ] . \'/\',
  \'/\' . get_the_time( \'Y/m/d\', $post ) . \'/\',
  $link
);
这将返回一个永久链接,如example.com/2014/07/02/post-name.

您必须调整pre_get_posts 回调,以便它处理年、月和日查询变量也将出现的事实。

结束

相关推荐

DELETE_OPTION()和UPDATE_OPTION()返回假

我知道当delete_option() 或update_option() 如果无法执行各自的数据库交互,则返回false。有人知道为什么他们不能执行这些操作吗?这只是针对特定选项。大多数选项都会起作用,然而,少数选项似乎会“消亡”。他们会好好工作一段时间,然后停止工作。有什么想法吗?