web-dev-qa-db-ja.com

フロントエンドからおすすめの画像をアップロード、保存、設定するにはどうすればよいですか。

自分のサイトにフォームがあります。

これでユーザーは行方不明者を1人登録します。行方不明者、カスタム分類法、およびカスタムフィールドがないカスタム投稿タイプを作成しました。この入力はすべてwpにも保存されます。

しかし、私は画像を送信してこの画像を注目画像として保存することを知りません。

$my_post = array(
                 'post_title' => $_POST['title'],
                 'post_date' => $_SESSION['cal_startdate'],
                 'post_content' => $_POST['myContent'],
                 'post_status' => 'draft',
                 'post_type' => 'pessoa_desaparecida',
              );

$post_id = wp_insert_post($my_post);


$uploaddir = wp_upload_dir();
$file = $_FILES["test"]["name"];
$uploadfile = $uploaddir['path'] . '/' . basename( $file );

move_uploaded_file( $file , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
    'post_content' => '',
    'post_status' => 'inherit',
    'menu_order' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
update_post_meta($post_id,'_thumbnail_id',$attach_id);

set_post_thumbnail( $post_id, $thumbnail_id );

しかしうまくいかない

フロントエンドの私のフォームは:

<form action="/homolog/cadastro" method="post" enctype="multipart/form-data">
 <input type="text"  name="title" />
 <input type="file" size="20"  name="test" />
</form>

印刷:

enter image description here

enter image description here

1
Arie

申し訳ありませんがこれは答えではありませんが、そのユーザー入力をサニタイズする必要があります。あなたの許可タグをあなたの投稿コンテンツに直接書き込むことができます。すべてのユーザー入力文字列に対して(最低でも)strip_tags()またはhtmlspecialchars()を強くお勧めします。より良い/代替の方法がありますが、これはあまり詳細に入ることなく、少なくとも良いスタートです。

理論的にはタイトルは問題になるでしょうが、私はWordPressがそこからタグを削除すると確信しています。ただし、WordPressでは投稿コンテンツにスクリプトタグを使用できるため、埋め込みコードを使用できます。

ユーザ入力をサニタイズしないことのリスクに気付いていない場合は、ファイルのアップロードを処理するときにさらに注意が必要です。悪意のあるファイルをダウンロードしたり、何千ものWebサイトユーザーにこれを実行させることは、悪意のあるJavascriptをブラウザ内で実行するよりも悪い可能性があります。ありがたいことにwp_insert_postは少なくともあなたの完全に生のユーザ入力へのSQLインジェクションを防ぐでしょう。

私の唯一の推奨事項は、アップロードを処理するために少なくとも許可されたMIMEタイプをチェックし、可能な限りWordPressの機能を使用することです。安全に(私は前にそれをやったことがあるが...私は今そのコードにアクセスすることができない)。

1
Joel M

あなたはこのように試すことができます:

set_post_thumbnail( $my_post_id, $thumbnail_id );

このようにして、まずライブラリに画像を追加する必要があります。

 $uploaddir = wp_upload_dir();
 $file = $_FILES[ ... whatever you have in your POST data ... ];
 $uploadfile = $uploaddir['path'] . '/' . basename( $file );

 move_uploaded_file( $file , $uploadfile );
 $filename = basename( $uploadfile );

 $wp_filetype = wp_check_filetype(basename($filename), null );

 $attachment = array(
      'post_mime_type' => $wp_filetype['type'],
      'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
      'post_content' => '',
      'post_status' => 'inherit',
      'menu_order' => $_i + 1000
  );
  $attach_id = wp_insert_attachment( $attachment, $uploadfile );

詳しくは このリンクを見てください

0

まず最初に、あなたのテーマがサムネイルをサポートしているかどうか、そしてあなたの行方不明者CPTもそれをサポートしているかどうかをチェックするべきです。 PHPコーディングでCPTを作成する場合は、これを確認してください。

add_theme_support( 'post-thumbnails' );
register_post_type( 'yourposttype', array(
    ...,
    'supports' => array('title', ...,'thumbnail'),
));

}

これが正しい場合は、以下の 回答のコード が機能します。

0
David Navia