如何使用TEMPLATE_INCLUDE挂钩提交表单?

时间:2021-12-15 作者:kloddant

我正在编写一个插件,它使用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\');

1 个回复
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\');
此外,出现此问题的原因似乎首先是因为我在表单中用与自定义帖子类型相同的名称命名了一个字段。如果我将表单字段命名为不同的名称,则没有问题。

相关推荐

Can I make plugins required?

我正在开发自己的Wordpress主题,将用于多个客户端。它有一个主题选项页面,这样我每次都可以轻松自定义网站,但我也会在我制作的每个网站上使用一些插件(如SEO插件、安全性等)。有没有办法让它们成为“必需的”,这样我就可以得到这些插件的列表,这样当我在新网站上安装主题时就不必在插件目录中找到它们了?