在unctions.php中获取POST数据

时间:2015-01-15 作者:Jamie

我以前做过,但在这种情况下似乎不起作用。我正在尝试从提供的slug中获取类别ID,然后如果页面ID与类别ID匹配,则向页面添加一个元框。我的网站在管理区域出现了两个错误

未定义索引:post和未定义索引post\\u id

    add_action(\'admin_init\', \'add_meta_boxes\', 1);
 function add_meta_boxes() {

    global $post;
     $post_id = $_GET[\'post\'] ? $_GET[\'post\'] : $_POST[\'post_ID\'] ;
     $cat = get_category_by_slug(\'audio\');
     $id = $cat->term_id;
     if ($post_id == $id)
   {
     add_meta_box( \'repeatable-fields\', \'Audio Playlist\', \'repeatable_meta_box_display\', \'post\', \'normal\', \'high\');
   }
 }

2 个回复
最合适的回答,由SO网友:Jamie 整理而成

我是这样做的

 if (is_admin() ){
 $post_id = isset($_GET[\'post\']) ? $_GET[\'post\'] : isset($_POST[\'post_ID\']) ;
 if( $post_id && in_category(\'audio\', $post_id) ){

    add_action(\'admin_init\', \'add_meta_boxes\', 1);
  }
}
此方法唯一的问题是,在发布帖子之前,它不会显示元框。$post\\u id变量在发布之前显示bool(false)。

所以,最大的问题是,当你去发表一篇新文章时,没有类别ID可获取。因此,使用Toscho帖子的链接,您可以添加类别信息,并使用$\\u GET测试这些信息。当你为那篇文章勾选类别时,它看起来会被填充。

SO网友:Privateer

我建议您使用操作来放置元框:

function my_add_meta_box() {
    global $post;
    if ( $post && is_a( $post, \'WP_Post\' ) ) {
        $cat = get_category_by_slug(\'audio\');
        if ( !is_wp_error($cat) ) {
            if ( $post->ID == $cat->term_id ) {
               add_meta_box( \'repeatable-fields\', \'Audio Playlist\', \'repeatable_meta_box_display\', \'post\', \'normal\', \'high\');
            } else {
               # for debug only
               wp_die("Post ID {$post->ID} and Cat ID {$cat->term_id}");
            }
        } else {
           # For debug only
           wp_die(\'Cat not found by slug!\');
        }
    } else {
        # For debug only
        wp_die(\'Post not found in global space!\');
    }
}
add_action(\'admin_init\', \'my_add_meta_box\');
编辑-从框显示中删除复选框。。。所以盒子不见了,不仅仅是空的
function repeatable_meta_box_display( $post ) {
   # Draw out your meta box fields

}
这将改变逻辑,但效果应该是相同的,您应该停止获取未定义的索引错误。

您将收到错误,因为并非所有管理页面都有帖子id。使用操作将使代码仅在需要时工作。

如果它不起作用,而您只是想消除错误,请尝试以下方法来代替检查代码:

global $post;
if ( $post && is_a( $post, \'WP_Post\' ) ) {
   $post_id = $_GET[\'post\'] ? $_GET[\'post\'] : $_POST[\'post_ID\'] ;
   $cat = get_category_by_slug(\'audio\');
   $id = $cat->term_id;
   if ($post_id == $id) {
      # Add meta box call here
   }
}
这应该确保该职位是你正在寻找的。

您可能需要在稍后的wordpress加载中添加第二个操作来检查post(可能它没有在admin\\u init中声明),然后如果不需要,删除meta框。

# Revised version without debug info

# Add the meta box
function my_add_meta_box() {
   add_meta_box( \'repeatable-fields\', \'Audio Playlist\', \'repeatable_meta_box_display\', \'post\', \'normal\', \'high\');
}
add_action(\'admin_init\', \'my_add_meta_box\');


# Remove the meta box if not needed once post is available
function maybe_remove_my_boxes() {
   $remove = true;
   global $post;
   if ( $post && is_a( $post, \'WP_Post\' ) ) {
      $cat = get_category_by_slug(\'audio\');
      if ( !is_wp_error($cat) ) {
          if ( $post->ID == $cat->term_id ) {
             $remove = false;
          }
      }
   }
   if ( $remove ) {
       remove_meta_box( \'repeatable-fields\', \'post\', \'normal\' );
       # echo( \'Removed as not needed\' );
   }
}
add_action(\'admin_head\', \'maybe_remove_my_boxes\');

结束

相关推荐

Categories in media library

我想在媒体库中添加一个相当大的声音集合。问题是,我无法在上传文件时将类别添加到一堆文件中。。。我甚至无法将其添加到一个上载文件。。。。我找不到解决这个问题的方法。将该类别添加到数千个声音文件中是一项艰巨的工作。是否可以在媒体库中添加标记字段或类别字段,并在上传媒体库页面中包含相应字段?answer中的插件不允许在上载时设置类别。。。也许是时候为用户添加更多功能来使用wordpress中的媒体库了?