$_FILE은 체크아웃 시 비어 있습니다.
저는 woocommerce의 체크아웃 양식에 많은 새로운 필드를 추가했습니다.완성된 php 파일에서 그렇게 읽습니다.
<form name="checkout" method="post" class="checkout woocommerce-checkout processing" action="http://localhost:100/wordpress/checkout/" enctype="multipart/form-data" style="position: relative; zoom: 1;">
<div id="pagePreview">
<input type="file" name="CheckoutImageUpload">
<div class="BBtextInputFrontend">
<input class="BBTextBoxFront" placeholder="placeholder">
<input class="BBInitialValue BBData" type="text" name="BBInitialValue[]">
</div>
<div class="BBtextInputFrontend">
<input class="BBTextBoxFront" placeholder="placeholder">
<input class="BBInitialValue BBData" type="text" name="BBInitialValue[]">
</div>
</div>
<!-- the rest is the default woocommerce billing inputs -->
<div class="col2-set" id="customer_details">
<div class="col-1">
<div class="woocommerce-billing-fields">
<h3>Billing Details</h3>
문제는 입력이
<input type="file" name="CheckoutImageUpload">
에 값을 반환하지 않습니다.$_FILES
array. 사실,$_FILES
array는 항상 빈 배열을 반환합니다.다른 가치관을 통해 얻을 수 있습니다.$_POST
문제없이.파일이 아닙니다.플러그 인을 다른 개별 컴퓨터에 새로 설치하는 경우에도 동일한 결과를 얻을 수 있습니다.
현재 이 코드를 사용하여 값을 찾고 있습니다.
function add_image($order_id) {
//if they DID upload a file...
if ($_FILES['CheckoutImageUpload']['name']) {
?>Y<?php
die();
}
else {
?>N<?php
die();
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'add_image', 100, 1);
누구 도와줄 사람?내가 미쳐가고 있는 것 같아
아래에 추가한 완전한 코드입니다.위에 보이는 것은 중요한 부분을 유지하면서 짧게 하는 것입니다.
<?php
/*
@package BBPlugin
@wordpress_plugin
Plugin Name: Brave books book preview plugin
Plugin URI: null
Description: Allows the user to single out words to be replaced for a preview in a book.
Author: Goodship
Version: 0.0.2
Author URI: www.Goodship.co.za
*/
// If this file is called directly, abort execution.
if ( ! defined( 'WPINC' ) ) {
die;
}
ini_set('error_reporting', E_ALL);
// This will attach the file needed for the class which defines
// meta boxes, their tabs, views and partial content.
require_once plugin_dir_path( __FILE__ ) . 'admin/class-BBPlugin.php';
/**
The class that represents the meta box that will display
the navigation tabs and each of the fields for the meta box.
*/
require_once plugin_dir_path( __FILE__ ) . 'admin/class-BBPlugin-meta-box.php';
/*
Execute the plugin.
Everything for this particular plugin will be done so from within
the Author_Commentary/admin subpackage. This means that there is no reason to setup
any hooks until we're in the context of the Author_Commentary_Admin class.
@since 0.0.1
*/
/*
This will create an instance of the BBPlugin_Admin class
from the class file mentioned previously as soon as the plugin is activated,
After accepting the plugin name and version parameters.
*/
add_shortcode("BB", "BraveBooksShortCode");
function BraveBooksShortCode( $atts, $content = null , $checkout) {
$inputDiv = '<div class="BBtextInputFrontend">
<input class="BBTextBoxFront" type="text" placeholder="'.$content.'" />
<input class="BBInitialValue BBData" type="text" name="BBInitialValue[]" />
</div>';
return $inputDiv;
}
function Run_BBPlugin() {
$BBPlugin = new BBPlugin_Admin('BB-Plugin', '0.0.1');
$BBPlugin->initialize_hooks();
}
Run_BBPlugin();
wp_register_style( 'postStyles', '/'.'wp-content/plugins/BBPluginv2/admin/assets/css/BBClasses.css' );
wp_enqueue_style('postStyles');
wp_enqueue_script( 'jquery' );
function load_my_script(){
wp_register_script(
'functions',
'/wp-content/plugins/BBPluginv2/admin/assets/js/functions.js' ,
array( 'jquery' )
);
wp_enqueue_script( 'functions' );
}
add_action('wp_enqueue_scripts', 'load_my_script');
function woo_redirect_to_checkout() {
$checkout_url = WC()->cart->get_checkout_url();
return $checkout_url;
}
add_filter ('woocommerce_add_to_cart_redirect', 'woo_redirect_to_checkout');
function check_if_cart_has_product( $valid, $product_id, $quantity ) {
global $woocommerce;
$woocommerce->cart->empty_cart();
$woocommerce->cart->add_to_cart($product_id,0);
return $valid;
}
add_filter( 'woocommerce_add_to_cart_validation', 'check_if_cart_has_product', 10, 3 );
function change_add_to_cart_loop( $product ) {
global $product; // this may not be necessary as it should have pulled the object in already
return '<a href="' . esc_url( $product->get_permalink( $product->id ) ) . '">READ MORE</a>';
}
add_filter( 'woocommerce_loop_add_to_cart_link', 'change_add_to_cart_loop' );
function woo_custom_cart_button_text() {
return __( 'Buy this book', 'woocommerce' );
}
add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' ); // 2.1 +
function wc_remove_all_quantity_fields( $return, $product ) {
return true;
}
add_filter( 'woocommerce_is_sold_individually', 'wc_remove_all_quantity_fields', 10, 2 );
function wc_add_to_cart_message_filter($message, $product_id = null) {
$message = sprintf( 'Please remember to enter your details before purchase.');
return $message;
}
add_filter ( 'wc_add_to_cart_message', 'wc_add_to_cart_message_filter', 10, 2 );
// display the extra data in the order admin panel
function kia_display_order_data_in_admin( $order , $order_id){
global $woocommerce, $post;?>
<div class="order_data_column">
<h4><?php _e( 'Words used' ); ?></h4>
<?php
$items = $order->get_items();
foreach ( $items as $item ) {
$product_id = $item['product_id'];
echo '<p>' .json_encode(get_post_meta($product_id, 'BBPlugin-Pages', true) ). '</p>';
echo '<p>' .json_encode(get_post_meta($post->ID, 'your_key', true) ). '</p>';
}
$pageJSONData = json_encode(get_post_meta($product_id, 'BBPlugin-Pages', true));
$wordsJSONData = json_encode(get_post_meta($post->ID, 'your_key', true));
?>
<script type='text/javascript'>
var pageArray = <?php echo $pageJSONData ?>;
var wordsArray = <?php echo $wordsJSONData ?>;
</script>
<a href="javascript:restructureInput(pageArray, wordsArray)">Create PDF</a>
</div>
<?php
}
add_action( 'woocommerce_admin_order_data_after_order_details', 'kia_display_order_data_in_admin' );
/*
** Getting an image to upload
*/
function add_image($order_id, $posted) {
$sanitized_input_data = array();
$inputsData = $_POST['BBInitialValue'];
$filesData = $_FILES['CheckoutImageUpload'];
$testLog = fopen("testicle.txt","w") or exit ("Unable to open file!");
fwrite ($testLog , "added files: " . $_FILES['CheckoutImageUpload']['name']);
foreach ( $inputsData as $inputsBoxNumber => $inputBoxData ) {
$inputArray = explode( "|", $inputBoxData );
if ( ! empty( $inputBoxData ) ) {
$BBData = array(
'shortcode' => $inputArray[0],
'word_used' => $inputArray[1]
);
fwrite ($testLog , "found files: " . $inputArray[0]);
$sanitized_input_data[ $inputsBoxNumber ] = $BBData;
}
}
fclose ($testLog);
update_post_meta( $order_id, 'your_key', $sanitized_input_data);
//if they DID upload a file...
if ($_FILES['CheckoutImageUpload']['name']) {
//if no errors...
if (!$_FILES['CheckoutImageUpload']['error'] ) {
$valid_file = true;
//now is the time to modify the future file name and validate the file
$new_file_name = strtolower($_FILES['CheckoutImageUpload']['tmp_name'] ); //rename file
if ($_FILES['CheckoutImageUpload']['size'] > ( 1024000 ) ){ //can't be larger than 1 MB
$valid_file = false;
$message = 'Oops! Your file\'s size is to large.';
echo $message;
die();
}
//if the file has passed the test
if ( $valid_file ) {
//move it to where we want it to be
//copy( $_FILES['CheckoutImageUpload']['tmp_name'], plugin_dir_path( __FILE__ ) . 'admin' );
$message = 'Congratulations! Your file was accepted.';
echo $message;
$BBdirectory = wp_upload_dir();
$BBdirectory = $BBdirectory['path'] .'/'. $order_id .'/';
if (!file_exists($BBdirectory)) {
mkdir($BBdirectory, 0777, true);
if (move_uploaded_file($_FILES['CheckoutImageUpload']['tmp_name'], $BBdirectory . $_FILES["CheckoutImageUpload"]['name'])) {
echo "Uploaded";
die();
} else {
echo "File was not uploaded";
die();
}
}
}
} //if there is an error...
else {
//set that to be the returned message
$message = 'Ooops! Your upload triggered the following error: ' . $_FILES['CheckoutImageUpload']['error'];
echo $message;
}
}
else {
}
}
add_action( 'woocommerce_checkout_update_order_meta', 'add_image', 99, 2);
//add_action( 'woocommerce_checkout_update_order_meta', 'add_image');
/*
function platoon_add_order_meta( $order_id, $posted ) {
$sanitized_input_data = array();
$inputsData = $_POST['BBInitialValue'];
foreach ( $inputsData as $inputsBoxNumber => $inputBoxData ) {
$inputArray = explode( "|", $inputBoxData );
if ( ! empty( $inputBoxData ) ) {
$BBData = array(
'shortcode' => $inputArray[0],
'word_used' => $inputArray[1]
);
$sanitized_input_data[ $inputsBoxNumber ] = $BBData;
}
}
update_post_meta( $order_id, 'your_key', $sanitized_input_data);
}
add_action( 'woocommerce_checkout_update_order_meta', 'platoon_add_order_meta', 99, 2 );
*/
function add_checkout_notice() {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
$item = end($items)['data']->post->ID;
$pages = get_post_meta( $item, 'BBPlugin-Pages', true );
echo '<div id="pagePreview">';
echo '<input type="file" name="CheckoutImageUpload" />';
foreach ( $pages as $pageNumber=>$pageData ) {
if ($pageData["page_type"] == "text_only"){
$designedData = $pageData["text"];
$designedData = do_shortcode ( $designedData, false );
echo $designedData;
}
else if ($pageData["page_type"] == "2up"){
$designedData = $pageData["text"];
$designedData = do_shortcode ( $designedData, false );
echo $designedData;
}
}
echo '</div>';
?>
<script>
function Test(){
<?php
/*
$testLog = fopen("testicle.txt","w") or exit ("Unable to open file!");
fwrite ($testLog , "added files: " . $_FILES['CheckoutImageUpload'] . $_POST['BBInitialValue']);
fclose ($testLog);
*/
?>
}
</script>
<a onclick="Test()" class="btn">Call PHP Function</a>
<?php
}
add_action( 'woocommerce_checkout_before_customer_details', 'add_checkout_notice');
/*
** end of image upload
*/
?>
디버깅을 위해 아래 코드도 포함시켰지만 아무것도 반환되지 않기 때문에 액션에만 국한되지 않습니다.
?>
<script>
function Test(){
<?php
$testLog = fopen("testicle.txt","w") or exit ("Unable to open file!");
fwrite ($testLog , "added files: " . $_FILES);
fclose ($testLog);
?>
}
</script>
<a onclick="Test()" class="btn">Call PHP Function</a>
<?php
"@Fred - ii- 모든 오류를 표시하기 위해 추가한 링크를 사용했는데 [Thu 3월 31일 12:23:09.121930 2016][:error] [pid 11208:tid 1248][client 127.0.1:51335] PHP 알림:정의되지 않은 인덱스: Z: CheckoutImageUpload:\Work\J00028 - Brave books 플러그인\워드프레스 스택\apps\wordpress\htdocs\wp-content\plugins\BBPluginv2\BBPlugin.290행의 php, 참조처: http://localhost:100/wordpress/product/a-book/이것이 도움이 됩니까?- 단도 선장
파일 이름 속성은 다음과 같습니다.name="checkoutupload"
하지만 당신은$_FILES['CheckoutImageUpload']
코드 전체에 걸쳐 표시됩니다.
그래서 네가 모든 걸 바꾸는 걸 막기 위해$_FILES['CheckoutImageUpload']
파일명 Atribute를 이름 있는 Atribute로 변경하기만 하면 됩니다.name="CheckoutImageUpload"
.
또, 업 로드처의 폴더에 올바른 패스가 설정되어 있는 것과 기입할 수 있는 적절한 권한이 있는 것을 확인해 주세요.
- 확인하다
var_dump($_FILES);
디버깅용 - 확인.
$_FILES['yourFieldName']['error']
파일 업로드 오류의 경우.php는 업로드, 할당 등의 동안 발생한 오류를 ['filename']에 저장합니다. - $_FILES는 어레이이므로
fwrite ($testLog , "added files: " . $_FILES);
won't work var_module은 대부분의 경우 가장 잘 작동합니다.(사일런트 디버깅의 경우 재귀적 포어치루프를 사용) - 에러가 발생했을 경우
$_FILES['yourFieldName']['error']
대부분의 경우 파일 사이즈가 너무 크거나(files.ini), 폴더를 쓸 수 없습니다.
다음을 시도합니다.
function add_image($order_id) {
//var_dump($_FILES);
$errors = array();
if (
!isset($_FILES['CheckoutImageUpload']['error']) ||
is_array($_FILES['CheckoutImageUpload']['error'])
) {
$errors[] = 'Invalid file.';
}
switch ($_FILES['CheckoutImageUpload']['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
$errors[] = 'you sent no file';
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$errors[] = 'file too big'
default:
$errors[] = 'unknown error';
}
// check filesize manually
if ($_FILES['CheckoutImageUpload']['size'] > 50000) { // whatever your php.ini says
$errors[] = 'file too big';
}
return json_encode($errors);
}
개발 목적으로 작은 텍스트 파일도 사용해 보십시오.큰 파일이 실패하면 다음 php.ini 값을 증가시킵니다.
- max_input_time
- max_syslog_time
- upload_max_filesize
- post_max_size
- session.session_max life time
간단한 파일 업로드를 먼저 테스트합니다.
여기 샘플이 있습니다.라고 저장하다로 저장하다test_upload.php
웹 서버를 통해 직접 액세스하여 파일 업로드를 테스트합니다.
<?php
// test_upload.php
// Tests php file upload capabilities
if($_SERVER['REQUEST_METHOD'] == 'POST') {
echo "<pre>";
print_r($_FILES);
exit();
}
?>
<form enctype="multipart/form-data" method='post' action=''>
<input type='file' name='file' />
<input type='submit' value='submit form' />
</form>
이 방법으로 동작하지 않는 경우는, php.ini 를 체크해, 설정되어 있는 일시 디렉토리가 Web 서버에 기입 가능한 것을 확인할 필요가 있습니다.
다음의 순서에 따라서, 시스템의 임시 디렉토리를 검색할 수 있습니다.
php -B 'echo sys_get_temp_dir(); echo "\n"; exit();'
이것은 Ajax 방식이기 때문에 설정이 약간 다르기 때문에 Ajax 방식을 추가하여 파일을 업로드해야 합니다.성능이 떨어질 것 같은데 어떻게 생각하는지 보세요!
스크립트 1에서 몇 가지 사항을 확인해야 합니다.")에 합니다.
2. 때만 합니다.2 . 가 있는 )를 변경해 . 페이지에 파일을 1개 업로드 했을 때만 동작합니다.이 범위를 좁힐 필요가 있는 경우는 jQuery(문서)를 변경합니다.
.스크립트3를 하기 전에 Ajaxurl - Ajaxurl - Ajaxurl 。스크립트를 시험하기 전에 이것을 먼저 체크하는 것을 추천합니다.
jQuery(form.checkout).on('submit', function(){
var fd = new FormData();
//searches the whole document, i am assuming you only need 1 file uploaded
var file = jQuery(document).find('input[type="file"]');
var individual_file = file[0].files[0];
fd.append("imagefile", individual_file);
fd.append('action', 'upload_image');
jQuery.ajax({
type: 'POST',
url: ajaxurl, // nb-----------------have you got a variable for ajaxurl? if not insert var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; somewhere in your template...or google the wp way!
data: fd,
contentType: false,
processData: false,
success: function(response){
//just spit out the response to the console to catch php errors etc..
console.log(response);
}
});
});
당신의 기능.php...
function upload_image(){
echo 'action had been called';
var_dump($_FILES);
// work with files!
}
add_action('wp_ajax_upload_image', 'upload_image');
add_action('wp_ajax_nopriv_upload_image', 'upload_image');
$_FILES를 완전히 폐기했습니까?양식 이름이 같은 다른 필드가 있을 수 있습니다.만약 당신이 complett 양식을 올렸더라면 (이미 언급한 바와 같이) 더 쉬웠을 것입니다.또 다른 이유는 php 스택에 업로드 폴더에 대한 쓰기 권한이 없고 아무것도 반환하지 않기 때문일 수 있습니다.서버 로그를 확인합니다.무슨 일이 있었는지 말해줄지도 몰라
내가 방금 생각해낸 다른 것.Crome을 사용하여 실행된 요청을 확인합니다.단, 세션을 유지하려면 [Network]섹션 체크박스를 켜야 합니다.브라우저가 페이지를 인식하지 못하고 새로고침할 수 있습니다. : )
언급URL : https://stackoverflow.com/questions/36287005/files-empty-at-checkout
'source' 카테고리의 다른 글
@Spring Boot Application 주석을 사용한 구성 (0) | 2023.02.17 |
---|---|
TypeError: nodejs에서 순환 구조를 JSON으로 변환하는 중 (0) | 2023.02.17 |
Restful API의 경우 GET method에서 json 데이터를 사용할 수 있습니까? (0) | 2023.02.17 |
Kafka는 "그룹 구성원이 실제로 소비자 그룹에 가입하기 전에 유효한 멤버 ID를 가지고 있어야 합니다." (0) | 2023.02.17 |
React-Router v4를 통한 값 전달 (0) | 2023.02.17 |