通过前台帖子提交根据条件设置帖子作者

时间:2013-12-14 作者:gurung

我允许用户从前端发帖。有三种用户。我自己是管理员,一个初级(被赋予作者的角色)和任何来自public的非登录用户。目前,如果前端有任何未登录的用户帖子,我将被指定为具有此代码的作者。当前我的wp_insert_post 数组如下所示:

\'post_title\'    => $final_title,
\'post_content\'  => $about_stuff,
\'post_status\'   => \'draft\',
\'post_author\'   => \'20\',
\'post_type\' => \'post\',
 etc....
其中,我的作者id为“20”。所有这些都很好。现在,我想实现的是,当我的小朋友登录并在前端创建帖子时,我希望他成为帖子的作者,而不是我(按照目前的设置)。我知道post_author 将需要是一个变量,例如。$content_creator. 下面是我迄今为止编写的代码,但我不知道如何将其组合起来以实现我所需要的。具体来说,我很困惑如何生成变量$content_creator使用其余代码。

if ( is_user_logged_in() ) {
    $current_user = wp_get_current_user();
    if ( 19 == $current_user->ID ) {
    \'post_author\' => \'19\';
    } else {
    \'post_author\' => \'20\',
    }
 } 
代码非常简单,说明如下:检查用户是否登录,如果是,检查用户id。如果用户id等于19,则设置\'post_author\' => \'19\' (my junior的用户id)否则将作者设置为admin。我想问两件事,我是否也需要global $post 在我的代码之前,我应该使用另一个wp_update_post 改为过滤。请帮忙。

最后一种情况必须是,当管理员或任何其他人创建帖子时,帖子作者必须设置为管理员(me),但当我的下级创建帖子时,他必须设置为帖子作者。如果我们在后端创建帖子,这将是不必要的,但由于某些原因,我们更喜欢在前端创建帖子。

<小时>UPDATE : SOLVED事实证明,使用wp\\u update\\u post非常简单。虽然,现在它工作得很好。如果你发现什么有趣的事,请告诉我。以下是我在wp\\u insert\\u post之后使用的代码

if ( is_user_logged_in() ) {
    $current_user = wp_get_current_user();
    if ( 19 == $current_user->ID ) {

    $update_creator = array(
                \'ID\'          => $pid, //created post ID
                \'post_author\' => \'19\'
            );

    wp_update_post( $update_creator );
    }
}

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

这段代码需要遵循wp_insert_post. 它基本上只是根据提供的条件更新post\\u作者。请注意,如果作者未登录,post\\u author将再次默认为admin。

if ( is_user_logged_in() ) {
    $current_user = wp_get_current_user();
    if ( 19 == $current_user->ID ) {
        $update_creator = array(
            \'ID\'           => $pid, // created post ID
            \'post_author\'  => \'19\'
        );

        wp_update_post( $update_creator );
    }
}

SO网友:Will

wp\\U insert\\U post\\U数据过滤器是正确的方法。我会这样做:

add_filter( \'wp_insert_post_data\', \'some_handler\' );

function some_handler( $data )//$data is an array of sanitized post data
{

 //do some conditional checking...
 if ( ! isset( $_POST ) ) {//the request to insert post data wasn\'t done by a user

  return $data;
 }

 //don\'t bother doing anything to any post type other than \'post\'    
 if ( $data[\'post_type\'] != \'post\' ) {

  return $data;
 }
 //there probably needs to be a bunch of other conditional checks made...
 //but after that, check for which author is posting:
 if ( $data[\'post_author\'] == 19 ) {

  return $data;
 } else {

  $data[\'post_author\'] = 20;
  return $data;
 }
}

结束