我正在编写一个插件,它使用template\\u include挂钩为自定义帖子类型使用自定义模板。这适用于GET请求,但对于POST请求,它是404,因为POST请求中此挂钩内的$POST变量为null。如何修复此问题,以便可以将此自定义模板用于GET和POST请求?
namespace mynamespace;
class MyPlugin {
public static function template_include($template) {
global $post;
var_dump($post); //$post exists for GET requests but is null for POST requests.
var_dump(get_queried_object());
// Same with get_queried_object.
// So for POST requests, I have no way of telling if this is the page of the specific
// custom post type that I want to target here.
if ($post and $post->post_type == \'thing\') { // true for GET, false for POST
return plugin_dir_path( __FILE__ ) . \'templates/thing.php\';
}
else if (get_query_var(\'post_type\') == \'thing\') { // true for GET, false for POST
return plugin_dir_path( __FILE__ ) . \'templates/thing.php\';
}
return $template;
}
}
add_filter(\'template_include\', \'\\mynamespace\\MyPlugin::template_include\');
SO网友:kloddant
结果是$wp->;查询变量[“post\\u type”]包含我需要的数据,无论请求方法是GET还是POST。
namespace mynamespace;
class MyPlugin {
public static function template_include($template) {
global $wp;
if ($wp->query_vars["post_type"] == \'thing\') {
return plugin_dir_path( __FILE__ ) . \'templates/thing.php\';
}
return $template;
}
}
add_filter(\'template_include\', \'\\mynamespace\\MyPlugin::template_include\');
此外,出现此问题的原因似乎首先是因为我在表单中用与自定义帖子类型相同的名称命名了一个字段。如果我将表单字段命名为不同的名称,则没有问题。