如何在我的插件中获得POST-ID?

时间:2012-04-22 作者:Jan

我正在尝试编写一个小插件,它允许我在每个页面上添加不同的主题。好仍在努力……;)

代码:http://pastebin.com/dP1GH43E

当我把return \'mytesttheme\'; 最后,它工作得非常完美!当我添加ID时($page_theme = get_post_meta(\'66\', [...]) 它也很有效。。

当我写作时echo $page_theme.\', \'; 返回前,输出:, , , mytesttheme, mytesttheme, mytesttheme, mytesttheme,

我认为空旷的空间是个问题。

在wp后端,它在wp核心帖子元内容框中将“mytesttheme”显示为帖子元内容。。因此,保存工作应该是这样的。。

有什么办法解决这个问题吗s

2 个回复
SO网友:Ralf912

您的代码有几个问题。让我们从头开始。。。

Adding hooks

All 您的挂钩将添加到后端。即使是那些在if((is_admin)) 树枝在钩子应该工作的地方明确添加钩子:

if (is_admin()){
  // do this on backend (admin side)
    /* load plugin functions */
    add_action(\'add_meta_boxes\', \'myplugin_add_meta_box\');
    add_action(\'save_post\', \'myplugin_save_meta_box\');

} else {
  // if we are NOT on backend (admin side) we have to be on frontend, because there is only frontend and backend.
    /* load page theme */
    add_filter( \'option_template\', \'my_plugin_get_page_theme\');
    add_filter( \'template\', \'my_plugin_get_page_theme\');
    add_filter( \'option_stylesheet\', \'my_plugin_get_page_theme\');

}

In the loop or not?

get_the_ID() 必须在循环内。钩子(“option\\u模板”、“template”和“option\\u样式表”)在哪里完成?在查询完成之前或之后(表示:在循环内还是在循环外)?两行代码给出了答案:

global $post;
var_dump( $post );
如果$post 为空(null),我们在循环之外。我们很早就迷上了。查询完成后,我们需要一个钩子。“init”钩子是一个奇怪的钩子。让我们稍微修改一下代码,让插件正常工作:

if (is_admin()){

    /* load plugin functions */
    add_action(\'add_meta_boxes\', \'myplugin_add_meta_box\');
    add_action(\'save_post\', \'myplugin_save_meta_box\');

} else {

    add_action( \'init\', \'my_template_hooks\', 5, 0 );

}

    function my_template_hooks(){

        /* load page theme */
        add_filter( \'option_template\', \'my_plugin_get_page_theme\');
        add_filter( \'template\', \'my_plugin_get_page_theme\');
        add_filter( \'option_stylesheet\', \'my_plugin_get_page_theme\');

    }
现在,我们的挂钩位于循环中,插件工作正常。

Deprecated function

在您使用的插件代码的第28行$themes = get_themes();. get_themes() 已弃用,应替换为“wp\\u get\\u themes()”。

Development

请启用WP调试(在WP config.php中将WP\\u DEBUG设置为TRUE)。调试消息将对您有很大帮助。

您可以在上找到完整的修改代码Github

SO网友:IFightCode

据我所知post->ID 回路外部,wp_query 应首先调用。我的意思是类似于下面的代码,它已经被@Jan建议过了

global $wp_query; 
$postid = $wp_query->post->ID;
或者,get_post_id() 可以为你工作,检查codex 更多信息。

结束

相关推荐

常量WP_USE_THEMES用于什么?

关于WP_USE_THEMES 常数Codex states:如果在自己的设计中使用循环(并且自己的设计不是模板),请将WP\\u USE\\u THEMES设置为false。但是对WordPress的实际影响是什么呢WP_USE_THEMES 设置为true还是false?我想知道WP是如何使用它的。