在函数.php中提供对post_id或post的访问

时间:2019-03-10 作者:Richard

我正在尝试将元盒添加到从特定帖子模板创建的任何帖子的底部。ie我不想在我所有的帖子上都有元数据库,只想在某些帖子上。

当我决定添加操作来绘制和保存元盒数据时,如果我可以访问帖子,我可以查看它使用的模板,然后继续绘制元盒或退出。

add_action( \'load-post.php\', \'post_metabox_setup\');

function post_metabox_setup() {
  //decide whether to add draw and save actions here
}
如何在“post\\u metabox\\u setup function”中访问$post或$post\\u id。我试过这样做:

add_action( \'load-post.php\', \'post_metabox_setup\');

function post_metabox_setup($post_id) {
  //but here $post_id an empty string when the post loads in the editor
}
有人知道怎么做吗?

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

当您通过添加操作时add_action(), 回调函数中可用的变量由您使用的特定挂钩决定。这个load-post.php 钩子不会将任何值传递给回调函数。

然而,当添加元框时,要使用的正确挂钩是add_meta_boxes, 这个钩子为回调函数提供了2个值$post_type$post.

因此,如果你想根据帖子的页面模板有条件地添加一个元框,你可以使用$post 变量为get_page_template_slug():

add_action( \'add_meta_boxes\', \'prefix_post_metabox_setup\', 10, 2 ); // The 2 here is required to get both arguments.

function prefix_post_metabox_setup( $post_type, $post ) {
    if ( \'my-template.php\' == get_page_template_slug( $post ) ) {
        add_meta_box(); // etc.
    }
}
请注意,这意味着在使用新模板保存页面/帖子之前,您的元框不会出现。在块编辑器(née Gutenberg)中,这可能需要手动刷新。

此外,最好的做法是在函数前面加上项目特有的前缀。post_metabox_setup 名称太通用。

相关推荐

Organize functions.php

组织职能的最佳方式是什么。php的性能?我有几个add\\u操作调用、几个add\\u主题支持、几个add\\u过滤器和4个附加函数。对于面包屑、样式表、注册菜单和小部件。我们是否需要遵守订单?例如,首先是所有add\\u过滤器函数,然后是add theme\\u support等。不确定添加代码是否相关,因为这是一个一般性问题。如果需要,我很乐意更新这篇文章。