将模板文件用于特定的自定义URL

时间:2020-01-10 作者:dbp

我试图使用自定义URL为加载页面模板single-events.php 无需重写默认URL格式。我正在使用筛选器template_include 要像这样加载模板,请执行以下操作:

add_filter(\'template_include\',\'include_template_for_single_event\',99);
function include_template_for_single_event($template)
{
    //check_for_single_event() will check if the current url = custom url
    if( check_for_single_event() ){
        $new_template = locate_template(array(\'single-events.php\',\'single.php\'));
        if($new_template)$template = $new_template;
    }     
   return $template;
}
问题是循环中单个cpt的内容没有加载,这意味着没有单个cpt的数据,例如get_the_ID(), have_posts()

编辑:

对于自定义帖子类型的单个帖子,我确实有一个默认链接

example.com/nepal/events/visit-year-2020 
现在,我想用URL加载相同的页面模板

example.com/nepal/events/visit-year-2020/2020-01-10. 
P.S.客户端仍然需要默认URL和此新URL,并在末尾附加每个可用日期。

1 个回复
SO网友:nmr

我不知道是什么nepal 是(仅文本前缀或可能是分类术语),但这并不是最重要的,如果需要,您将对其进行更正。像这样重写规则应该可以解决这个问题。

add_action( \'init\', \'se356109_events_custom_rule\' );
function se356109_events_custom_rule()
{
    add_rewrite_rule(
        \'nepal/events/(.+?)/([0-9\\-]+)(:?/page/?([0-9]+))?/?$\',
        \'index.php?events=$matches[1]&paged=$matches[3]\',
        \'top\'
    );
}
如果您需要在某处使用URL日期(在您的示例“2020-01-10”中),则需要添加一个新的查询变量(使用任何名称,例如。custom_dt) 并修改重写规则。

add_action( \'init\',       \'se356109_events_custom_rule\' );
add_filter( \'query_vars\', \'se356109_query_vars\' );

function se356109_query_vars( $vars )
{
    $vars[] = \'custom_dt\';
    return $vars;
}

function se356109_events_custom_rule()
{
    add_rewrite_rule(
        \'nepal/events/(.+?)/([0-9\\-]+)(:?/page/?([0-9]+))?/?$\',
        \'index.php?events=$matches[1]&paged=$matches[3]&custom_dt=$matches[2]\',
        \'top\'
    );
}
这就是你如何读取这个新变量的值:

$dt = get_query_var(\'custom_dt\', false);

相关推荐

Wordpress Permalinks

我在最近建立的网站上使用Wordpress Sydney主题。如果我将永久链接更改为post选项,我的网页链接将中断。对于不是技术大师的人来说,有没有简单的方法来解决这个问题。任何(详细的)帮助都将不胜感激。