1

WordPress の cms を使用していますが、カスタム フォームについてサポートが必要です。ユーザーがフロントエンドから投稿できるようにします。いくつかのフィールドと画像アップロード フィールドがあります。これは 2 つの部分からなるフォームで、最初の部分でデータを送信し、2 番目のステップで送信したばかりのデータのプレビューを取得します。これは submit の後に発生することに注意してください。

フォームコード:

<?php
    global $wpdb;
    $this_page  =   $_SERVER['REQUEST_URI'];
    $page       =   $_POST['page'];
    if ( $page == NULL ) { ?> 

<form method="post" action="">

<div>LOCATION : <input type="text" name="location"/></div>

<div>DESCRIPTION : <textarea id="details" cols="80" rows="10 maxlength="600" name="details" rows="20"></textarea></div>

<div>UPLOAD IMAGE : <input type="file" name="loc-image" id="loc-image" tabindex="25" /></div>


<input type="hidden" value="1" name="page" />
<input type="hidden" name="action" value="post_action" />
<input type="submit" name="submit" value="PROCEED"/>
</form>

<?php 
} else if ( $page == 1 ) { ?> 

<?php 
$location=$_POST['location'];
$description=$_POST['details'];
$photo=$_POST['loc-image'];

echo 'Location : ' . $location . '</br>';
echo 'Details  : ' . $description . '</br>'; 
echo 'Image    : ' . $photo . '</br></br>';
?>
<?php
}
?>

問題: 最後のステップで、現在のコードは送信されたすべてのデータを画像名とともに表示できますが、画像は表示できません。この時点で画像を表示したいと思います。基本的に、最後のステップはプレビュー ページのようなものにする必要があります。

以下に示すコードはフォームを処理します。特に、添付ファイルの挿入に役立つコードの特定の部分に注意を向けたいと思います。解決策を考案するのに役立つ可能性があります。

フォーム プロセッサ :

   if( 'POST' == $_SERVER['REQUEST_METHOD'] &&  $_POST['action'] == "post_action") {

                //some error checking done here

                //set vars
                $location       =  $_POST['location'];
                $description =  $_POST['details'];


                if (empty($error)) {   
                $new_post = array(   //insert form inputs, set var and define array
                'post_title'    =>  $location, 
                'post_content'  =>  $description,
                'post_status'   =>  'draft', 
                'post_type' =>  'post',  
                // assigning tags and categoris is no issue
                );

                $pid = wp_insert_post($new_post);

                                        //attachment helper function    
                                        function insert_attachment($file_handler,$post_id,$setthumb='false') {

                                            if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK){ return __return_false(); 
                                            } 
                                            require_once(ABSPATH . "wp-admin" . '/includes/image.php');
                                            require_once(ABSPATH . "wp-admin" . '/includes/file.php');
                                            require_once(ABSPATH . "wp-admin" . '/includes/media.php');

                                            $attach_id = media_handle_upload( $file_handler, $post_id );

                                            //set post thumbnail
                                            if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
                                            return $attach_id;
                                            }


                                        //INSERT OUR MEDIA ATTACHMENTS
                                        if ($_FILES) {
                                        foreach ($_FILES as $file => $array) {
                                        $newupload = insert_attachment($file,$pid);
                                        // $newupload returns the attachment id of the file that
                                        // was just uploaded. Do whatever you want with that now.
                                        }
                                        } // end of attachment statement
    }
    }

脚注 : 問題を除けば、コードは大幅にカスタマイズされており、私の wp-install でうまく機能します。したがって、コード内の二次的な要因は無視してください。検証、セキュリティなど

4

2 に答える 2

0

一時フォルダーに画像を保存しなかったのは正しいので、最初に一時フォルダーに保存し、[ドライブ名]:/[フォルダー名] /[img_path] のような画像パスを使用してプレビュー ページに画像を表示します。

フォームを送信した後、Temp フォルダーから画像を削除し、元のフォルダーに保存します。

于 2013-10-07T10:30:56.440 に答える
0

フォーム送信後にプレビューが必要だったので、ソリューションは思ったよりも比較的簡単でした。特に、添付ファイル ID が既に$newupload割り当てられ、コードで宣言されている場合はそうでした。それで、私は完全にワードプレスのルートに行き、以下のコードを使用して画像を呼び出しました。これは魅力のように機能します。

<?php echo wp_get_attachment_image( $newupload,'medium' ); ?>

wp_get_attachment_imageの詳細については、リンクをたどってください。それが誰かを助けることを願っています。

于 2013-10-08T06:49:49.670 に答える