如何在使用TEMPLATE_REDIRECT或TEMPLATE_INCLUDE后将帖子加载到自定义帖子模板

时间:2014-12-27 作者:terminator5505

我需要使用URL参数?m=1 用不同的模板加载wordpress的每个页面,但问题是我无法提取可以使用规范URL访问的文本和帖子我尝试了不同的方法,对我来说最好的方法是使用template_redirect 行动挂钩或template_include 过滤器问题是,我无法使用任何这种方法将数据加载到模板文件中模板加载,但页面是空的,使用某些方法,它会返回404错误,以便更好地解释我的问题

我将此代码添加到functions.php

add_filter( \'template_include\', \'custom_template\' );

function custom_template($template) {
   global $post, $wp_query;
  if ($wp_query->query_vars[\'m\'] === \'1\') {
    return TEMPLATEPATH . \'/custom-template.php\';
  } else {
    return $template;
  }
}
我无法将帖子加载到模板文件custom-template.php 此代码返回空白

<div id="content">
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
          <h2 class="item"><span class="fn"><?php the_title(); ?></span></h2>
        <?php the_content(); ?>
    <?php endwhile; else: ?>
    <?php endif; ?>
</div>
代码呈现为空白

<div id="content">
</div>
我需要一个带有URL参数的自定义模板?m=1 并在规范url中加载相同的帖子是否有任何工作方法可以使用url参数显示具有有效帖子数据和标题的自定义模板?m=1

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

以下是通过保留wordpress参数强制更改主题的完整代码

add_action(
    \'pre_get_posts\',
    \'my_pre_get_posts\'
);

function my_pre_get_posts($wp_query) {
    global $wpdb;

    // Confirm request is main query
    if(!$wp_query->is_main_query()) {
        return;
    }

    // Get post name from query
    $post_name = $wp_query->get(\'pagename\');

    // Get post type from database
    $post_type = $wpdb->get_var(
        $wpdb->prepare(
            \'SELECT post_type FROM \' . $wpdb->posts . \' WHERE post_name = %s LIMIT 1\',
            $post_name
        )
    );

    // Confirm page is post
    if ($post_type === \'post\') {
        $wp_query->set(\'m\', \'\');
    }
}

add_action(
    \'template_redirect\',
    \'my_template_redirect\'
);

function my_template_redirect() {
    global $post, $wp_query;

    if ($wp_query->query[\'m\'] === \'123\') {
        include TEMPLATEPATH . \'/template-name.php\';
        die();
    }
}
只要向函数中添加全局$wp\\u查询,就可以使用template include方法代替template\\u重定向挂钩

结束

相关推荐

Random Alphanumeric Key URLs

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