我正试图在一个(非常)自定义的URL下显示一个我选择的模板中的帖子。在这个例子中,我的帖子ID是1008,我的模板名是“/单曲/演讲”。php’。
Im未来将检查URL,并在执行操作时添加条件-现在对于测试,条件只是if (1)
- 对于测试,它适用于所有URL。
当我输入自定义URL时,将检索并显示模板,没有任何问题,但数据有问题。
在我检查$post变量时,函数中有一些默认值$post
object assigned-假设其ID==488,所以我试图让Wordpress使用我需要的帖子,所以我get_post()
以及setup_postdata()
分配路线codex 说应该行,但不行。
我的/singles/lecture.php
返回初始“默认”帖子(即488)的数据。
add_filter(\'template_include\', \'my_custom_urls\');
function my_custom_urls($original_template) {
global $post;
if (1) {
// second correct but not working alternative
// $post = get_post(1008);
// setup_postdata($post);
$post_object = get_post(1008);
setup_postdata($GLOBALS[\'post\'] =& $post_object);
return get_template_directory() . \'/singles/lecture.php\';
} else {
return $original_template;
}
}
我做错了什么?如何以这种方式设置$post变量,使其可用于我的模板。
SO网友:WebElaine
所有CPT“演讲”帖子都应该使用此模板吗?如果是这样,只需将您的文件重命名为single Teach。php并将其放置在主题的根目录中,由于其模板层次结构,WP将自动使用它。
如果您试图将此自定义模板分配给手工挑选的页面,无论您在哪里注册帖子类型,请添加对“页面属性”的支持,并通过在顶部添加注释将模板设置为自定义模板。
CPT:
register_post_type(\'lecture\'),
array(...
...
\'supports\' => array(\'title\', \'editor\', \'page-attributes\'),
);
模板:
<?php
/*
* Template Name: Customized Lecture
*/
...
您可能需要注销CPT,然后使用此新代码重新注册,以便WP识别新属性。一旦您的CPT具有“页面属性”,您将在后期编辑屏幕上看到一个新的下拉列表,就像您在页面上看到的一样,允许您选择模板。然后,您可以根据文件顶部注释中使用的任何名称选择模板。