Php-用于新POST和编辑POST的条件语句

时间:2014-04-22 作者:Roc

这个问题是在为编辑创建自定义元框时出现的。php页面。

是否有条件语句针对已经存在的帖子和尚未创建的帖子?

想法:

If editing post (post exists) {
 // Display custom input field
} else if adding post (post does not exist)
 // Hide custom input field
}
此代码段将在自定义元框中使用。

我不太确定要搜索什么,因为它似乎很广泛。。。

最简单(也是最有效)的解决方案是检查帖子标题是否存在吗?我还没有试过,但似乎可以。

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

edit.php 是帖子/页面list, 后期创建/编辑屏幕是两个单独的文件:post-new.phppost.php.

因此,您可以使用"load-$page" 挂钩,例如:

add_action( \'load-post.php\', function() {
  // add metabox or whatever you want when EDITING post
  add_action( \'add_meta_boxes\', \'myplugin_meta_box_editing\' );
} );

add_action( \'load-post-new.php\', function() {
  // add metabox or whatever you want when creating NEW post
  add_action( \'add_meta_boxes\', \'myplugin_meta_box_new\' );
} );
获取更具体的信息(例如,正在创建/编辑的职位类型),如下所示@KrzysiekDróżdż alredy说,你可以使用当前屏幕对象,但是我建议你使用get_current_screen() porpose的函数。

add_action( \'load-post.php\', function() {
  // add metabox or whatever you want when EDITING post
  $screen = get_current_screen();
  // this should give you an idea of the infromation you can get
  // DO NOT USE IN PRODUCTION
  echo \'<pre>\';
  print_r( $screen );
  die();
} );
当添加元盒时,作为替代或依赖于以前的方法,用于输出元盒的回调(第3个参数add_metabox 函数)接收post id,因此使用get_post() 您可以检索正在编辑的post对象post_status 您可以知道帖子是否刚刚创建:

add_action( \'add_meta_boxes\', \'myplugin_add_meta_box\' );

function myplugin_add_meta_box() {
  // do you need information about screen?
  // this can be used, e.g. to use different metabox callback if
  // editing or creating a new post
  // $screen = get_current_screen(); 
  add_meta_box(
    \'myplugin_sectionid\', // metabox id
     __( \'My Post Section Title\', \'myplugin_textdomain\' ), // metabox label
     \'myplugin_meta_box_callback\', // metabox callback, see below
     \'post\' // this metabox is for \'post\' post type
  );
}

function myplugin_meta_box_callback( $post_id ) {
   $post = get_post( $post_id );
   $status = $post->post_status;
   if ( $status === \'new\' || $status === \'auto-draft\' ) {
     // this is a new post
   } else {
     // editing an already saved post
   }
}

SO网友:Krzysiek Dróżdż

像这样的方法应该会奏效:

global $current_screen;

if ( $current_screen->action == \'add\' ) {
    // you\'re adding new post
} else {
    // you\'re editing...
}
如果只想对一种帖子类型执行此操作,可以选中id 字段如下:

if ( $current_screen->action == \'page\' ) ... // or post, etc.
你需要小心点。你不应该去chceck$current_screen 在设置之前。之后的任何挂钩current_screen 应该没问题(所以wp 钩子应该很有魅力,但是init 钩子此对象将为NULL)。

结束

相关推荐

为自定义字段创建Metabox

我使用自定义字段将视频添加到WordPress帖子的视频格式中。我想知道是否有任何方法可以在post editor中为特定的自定义字段创建一个元框(如摘录或其他内容)。只需要一个文本区域来添加iframe代码。例如,自定义字段是嵌入视频。