web-dev-qa-db-ja.com

フロントエンドからログインせずに投稿を作成する

私はWordPress開発に不慣れで、フロントエンドから投稿を作成するのにwp_insert_post()を使っています。この関数はすでにログインしているときはうまく働きますが、ログインせずにこれを実装する必要があります。

これがどのように達成されることができるか正確な方法を私に導いてください。

$post = array(
 'post_title'   => "Tshirt-custom-order-".$last_inserted,
 'post_content' => "oio",
 'post_status'  => "publish",
 'post_excerpt' => "uuu",
 'post_name'    => "order_custom_".$last_inserted, //name/slug
 'post_type'    => "product",
 'post_author' =>6
 );
 //Create product/post:
$new_post_id = wp_insert_post( $post, $wp_error );
//$new_post_id = wp_insert_post( $args );
2
owt

匿名ユーザーが認証なしでWebサイトに何かを公開することを許可しないでください。ユーザーが指定したカスタムデータを保存する必要がある場合は、代わりにカスタムフィールドを使用してください。

あなたの場合は、 add_post_meta() が便利です。 wp_insert_post()を使用して投稿を作成したら、そのIDをadd_post_meta()に渡し、その特定の投稿にカスタムフィールドを追加します。

$id = wp_insert_post( $args );
if ( $id ) {
    add_post_meta( $id, $meta_key, $meta_value, $unique );
}

データベースに挿入する前にユーザー入力をサニタイズする必要もあります。この目的のために sanitize_text_field() を使うことができます。

1
Jack Johansson

非プラグイン:

Wp insert post argsを見てください。
https://developer.wordpress.org/reference/functions/wp_insert_post/

あなたはそれらの$ argsのいくつかのためにhtml入力を作成するべきです。投稿が投稿されたとき(投稿が設定されている場合)、次のことができます。

if (!is_user_logged_in()){
$newid = wp_insert_post($args); 
if ($newid){ 
// add_post_meta here if  your post type have 
//some success notification 
} else { 
//some failed notification 
}
}

プラグインを使う:

https://wordpress.org/plugins/advanced-custom-fields/ /

簡単に見える

1
Asisten