相同内容的不同模板,来自不同URL的登录页面(通用、简单)

时间:2014-11-17 作者:helle

我想知道是否有人有办法解决这个问题。

假设有两个URL:

示例。com/portfolio xyz示例。com/公文包/someidentificationexample.com/portfolios/someidentification 应显示以下内容:example.com/portfolio-xyz 但使用不同的模板。

有没有一种方法可以用最少的精力来归档?

EDIT

这两种情况下的“登录页”(见以上URL)都是WordPressportfolio 自定义帖子类型页面。所以说:不page 而且没有post 岗位类型。

additional information

这不仅适用于一个特定入口。对于一组投资组合过账,它应是通用的。

因此,您在一个网站上有许多公文包,应该能够通过不同的url/url模式(默认url)访问它们,然后显示其他模板。

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

我不知道你对“简单”的定义是什么,所以不确定这是否符合条件。动态地做到这一点并不是一项简单的任务。

首先,我们注册一个新的查询变量以传递备用标识符:

function wpd_portfolios_query_var($query_vars){
    $query_vars[] = \'portfolio_key\';
    return $query_vars;
}
add_filter(\'query_vars\', \'wpd_portfolios_query_var\');
接下来,我们添加一个重写规则来处理传入的请求,并相应地设置查询变量:

function wpd_portfolios_rewrite(){
    add_rewrite_rule(
        \'portfolios/([^/]+)/?$\',
        \'index.php?post_type=portfolio&portfolio_key=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'wpd_portfolios_rewrite\' );
然后我们上钩parse_query, 检查是否设置了查询变量,并将这些请求转换为单数post请求。否则WordPress将默认将这些请求设置为is_home.

function wpd_portfolios_parse( $query ){
    if( isset( $query->query_vars[\'portfolio_key\'] ) ){
        $query->is_home = 0;
        $query->is_single = 1;
        $query->is_singular = 1;    
    }
}
add_action( \'parse_query\', \'wpd_portfolios_parse\' );
接下来我们上钩pre_get_posts 使用所需的元值为公文包帖子设置元查询。

function wpd_portfolios_query( $query ){
    if( isset( $query->query_vars[\'portfolio_key\'] ) ){
        $query->set( \'posts_per_page\', 1 );
        $meta_query = array(
            array(
                \'key\' => \'portfolio_key\',
                \'value\' => $query->query_vars[\'portfolio_key\']
            )
        );
        $query->set( \'meta_query\', $meta_query );
    }
}
add_action( \'pre_get_posts\', \'wpd_portfolios_query\' );
最后,我们过滤single_template 要加载这些请求的特殊模板,请执行以下操作:

function wpd_portfolios_template( $template = \'\' ){
    global $wp_query;
    if( isset( $wp_query->query_vars[\'portfolio_key\'] ) ){
        $template = locate_template( \'portfolio-special.php\', false );
    }
    return $template;
}
add_filter( \'single_template\', \'wpd_portfolios_template\' );

SO网友:kaiser

实现这一目标的“最便宜”方法可能是简单地添加两页:

// Standard template
http(s)://example.com/portfolio-xyz
然后用第二个URl添加另一个页面,并使用自定义页面模板,在该模板中使用get_post() 并以您喜欢的方式显示:

<?php
/* Template Name: Alternate Portfolio PT template */

get_header();

// Fetch post via ID
$post = get_post( 123 );
// Set everything up so the API is ready to use
$is_set_up = setup_postdata( $post );
if ( $is_set_up )
{
    the_title();
    the_content();
}

// or use a custom query
$post = new WP_Query( array( /* your arguments here */ ) );
if ( have_posts() )
{
    while ( have_posts )
    {
        the_post();
        the_title();
        the_content();
        // etc.
    }
}

get_sidebar();
get_footer();

结束

相关推荐

Random Alphanumeric Key URLs

我需要随机(和唯一)字母数字永久对齐。我查看了几个插件,但它们似乎都会以某种形式重定向到更长的URL。这不是我想要的,我想要改变永久链接。基本上,我想要像bit这样的URL。ly或9gag。com。我已经看过了,但在我的搜索中发现是空的-是否存在这样的插件?如果没有,是否有人能为我指明正确的方向,告诉我如何完成这一目标?我在PHP方面相当自给自足,但我还不太熟悉WordPress。我能想到的最简单的方法是add_filter(\"post_slug\", md5(rand())) (如果这是实际有效的代码