私はPHPを使用してカスタム投稿を動的に作成しています。ログインユーザー以外のユーザーになる必要があります。私はこれを見つけました https://stackoverflow.com/questions/5759359/wordpress-manually-set-the-author-of-a-post-in-php しかし、投稿が既に挿入された後にそれをする方法があるかどうか疑問に思います。私はちょうどdbクエリを行うことができると思います...
作成者のIDを知っていれば、IDとそれに対する作成者IDを指定してwp_insert_postを使用できます。
$id = $post->ID; // change this to whathever
$user_id = '4'; // change this too
$the_post = array();
$the_post['ID'] = $id;
$the_post['post_author'] = $user_id;
wp_insert_post( $the_post );
秘訣は投稿を更新するためのIDを指定することです。 wp_insert_post()
を参照してください。
この質問と、 スタックオーバーフロー ( ワードプレス - 手動でphp の投稿の作者を設定する)で尋ねられた別の質問との間の単純さと関連性のため - リンクここでWPSEのOPによって。
WordPressは、 wp_insert_post()
および wp_update_post()
を使用して投稿を挿入または更新するときに、post_author
の値を強制するようです。
これを回避するには、フィルタフックwp_insert_post_data
を使用します。
/**
* Filter slashed post data just before it is inserted into the database.
*
* @since 2.7.0
*
* @param array $data An array of slashed post data.
* @param array $postarr An array of sanitized, but otherwise unmodified post data.
*/
$data = apply_filters( 'wp_insert_post_data', $data, $postarr );
例フィルタフックwp_insert_post_data
:の使い方
function remove_author_id( $data, $postarr ) {
if ( $data['post_type'] != 'YOUR-POST-TYPE-HERE' ) {
return $data;
}
$data['post_author'] = 0;
return $data;
}
add_filter( 'wp_insert_post_data', 'remove_author_id', '99', 2 );
これはPHP
を使用して投稿を挿入または更新する場合に特に便利です。
注:カスタム投稿タイプでauthor
のサポートを必ず無効にして、この投稿タイプの範囲内で作者関連の関数を使用する場合はおそらく慎重になるはずです。
これがカスタム投稿タイプであり、投稿に投稿者を割り当てたくない場合は、register_post_typeのsupports( array )
から 'author'を削除できます。 http://codex.wordpress.org/Function_Reference/register_post_type
投稿タイプに対して作成者のサポートが必要な場合は、作成者のメタボックスをフィルタリングすることにより、post.php/post-new.phpでこれを行う方がはるかに理にかなっています。
解決策は、wp_dropdown_usersを使用してnoneまたはnullユーザーをドロップダウンに追加することです'show_option_none'
WordPressは、nullユーザーに対して<option value="-1">
を使用しますが、dbには0として表示されます。
*注意:この例では、作成者divを発行ボタンのすぐ上に移動します。
add_action( 'post_submitbox_misc_actions', 'move_author_meta' );
function move_author_meta() {
global $post_ID;
$post = get_post( $post_ID );
echo '<div id="author" class="misc-pub-section" style="border-top-style:solid; border-top-width:1px; border-top-color:#EEEEEE; border-bottom-width:0px;">Author: ';
better_author_meta_box( $post ); //This function is being called in replace author_meta_box()
echo '</div>';
}
function better_author_meta_box($post) { ?>
<label class="screen-reader-text" for="post_author_override"><?php _e('Author'); ?></label>
<?php
if ( 'auto-draft' == $post->post_status ) : $selected = false; elseif ( $post->post_author == 0 || ( ! $post->post_author) ) : $selected = -1; else : $selected = $post->post_author; endif;
wp_dropdown_users( array(
'who' => 'authors',
'name' => 'post_author_override',
'selected' => $selected ? $selected : (int) -1,
'include_selected' => true,
'show_option_none' => 'NONE',
'orderby' => 'display_name',
'show' => 'display_name',
'order' => 'ASC'
) );
}
$ selectedのすべての追加の条件付きチェックに必ず気づいてください。やり過ぎかもしれませんが、編集者が以前に公開された投稿から著者を誰にも変更できないという問題を排除しました。