有没有可能让用户有机会在两个单独的模板文件之间进行选择,以便在帖子中使用?

时间:2011-03-25 作者:janoChen

基本上,我希望允许用户选择要在帖子中使用的模板文件:

single-asc.php:

<?php $custom_posts = new WP_Query(); ?>
            <?php $custom_posts->query(\'post_type=bbp_topic&order=ASC\'); ?>
            <?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
                <div class="content-block-2">
                    <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( \'Permalink to %s\', \'twentyten\' ), the_title_attribute( \'echo=0\' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
                </div>
            <?php endwhile; ?>
single-desc.php:

        <?php $custom_posts = new WP_Query(); ?>
        <?php $custom_posts->query(\'post_type=bbp_topic&order=DESC\'); ?>
        <?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
            <div class="content-block-2">
                <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( \'Permalink to %s\', \'twentyten\' ), the_title_attribute( \'echo=0\' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
            </div>
        <?php endwhile; ?>
在本例中,用户可以选择(可能通过单击链接)查看带有single-asc.php 模板文件或single-desc.php 模板文件。

(ASC和DESC示例仅供参考,这两个模板将有不同的代码)

有什么建议可以做到这一点吗?

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

如果页面中的差异只是查询参数,则可以添加查询变量并在同一模板中使用它们:

//add your arguments to query vars
add_filter(\'query_vars\', \'my_query_vars\');

function my_query_vars($vars) {
    // add my_sortand ptype to the valid list of variables you can add as many as you want
    $new_vars = array(\'my_sort\',\'ptype\');
    $vars = $new_vars + $vars;
    return $vars;
}
您的查询应如下所示:

<?php $custom_posts = new WP_Query(); ?>
<?php $custom_posts->query(array(\'post_type\' => get_query_var(\'ptype\'), \'order\' => get_query_var(\'my_sort\'))); ?>
<?php while ($custom_posts->have_posts()) : $custom_posts->the_post(); ?>
    <div class="content-block-2">
        <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( \'Permalink to %s\', \'twentyten\' ), the_title_attribute( \'echo=0\' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
    </div>
<?php endwhile; ?>
用户的链接应该是:

ASC:url+?p类型=bbp\\U主题(&U);my\\u sort=ASC描述:url+?p类型=bbp\\U主题(&U);my\\u sort=DESCNow 如果页面中的差异大于查询参数,则可以使用template_redirect 挂钩:

与之前相同添加查询参数

   //add your arguments to query vars
    add_filter(\'query_vars\', \'my_query_vars\');

    function my_query_vars($vars) {
        // add my_sort to the valid list of variables 
        $new_vars = array(\'my_sort\');
        $vars = $new_vars + $vars;
        return $vars;
    }
然后向template\\u redirect挂钩添加一个函数,并基于该参数创建重定向:

add_action("template_redirect", \'sort_template_redirect\');
// Template selection
function sort_template_redirect()
{
    global $wp;
    global $wp_query;
    if (isset($wp->query_vars["my_sort"]))
    {
        // Let\'s look for the template file in the current theme
        if (array_key_exists(\'my_sort\', $wp->query_vars) && $wp->query_vars[\'my_sort\'] == \'ASC\'){
            include(TEMPLATEPATH . \'/single-asc.php\');
            die();
        }
        if (array_key_exists(\'my_sort\', $wp->query_vars) && $wp->query_vars[\'my_sort\'] == \'DESC\'){
            include(TEMPLATEPATH . \'/single-desc.php:\');
            die();
        }
    }
}
您需要再次将参数添加到链接中,以便:

ASC:url+?my\\u sort=ASC描述:url+?my\\u sort=DESC

结束

相关推荐

Posts wont expire

我在安排帖子自动过期(要么删除,要么起草)方面遇到了一些麻烦,我尝试过的每个插件都没有做任何事情,当它达到预定时间时,什么都没有发生,这让我觉得这可能是我一直忽视的一件简单的事情。。我想我可能对wp-cron有问题,但我似乎在通过wordPress设置未来的发布日期方面没有任何问题。我运行了最新版本的Wordpress,并设置了多个站点。所有插件都是目前可用的最新版本。有人有什么想法吗??我没有东西可以尝试了。。。提前感谢塔夫芝