WordPress后端表单返回JSON

时间:2018-07-18 05:19:19

标签: wordpress forms plugins

我为wordpress网站开发了一个小的单文件插件。它只是为文件添加了一个上传表单,该表单会自行发布,然后在提交文件后对其内容进行一些处理。

它在暂存环境中运行良好,但是在实时服务器上存在一个奇怪的问题。当我使用文件提交表单后,服务器不会将我带回到同一页面,而是返回以下JSON:

{"success":false,"message":"Please enter a message."}

我很茫然,可能是什么原因造成的。有人遇到过这样的问题吗?

(简化的插件):

function show_upload_form() {

    if ($_FILES['userfile']) {
        echo "<p>file received</p>";

        $file = fopen($_FILES['userfile']['tmp_name'], "r");

        $data = [];
        while (!feof($file)) {
            $data[] = fgetcsv($file,null,';');
        }

        foreach ($data as $line) {

            $pid = $line[0];

            if (isset($line[1])) {
                $price = trim(str_replace(',', '.', $line[1]));
            } else {
                $price = "";
            }

            if (isset($line[2])) {
                $title = trim(iconv("ISO-8859-1", "UTF-8", $line[2]));
            } else {
                $title = "";
            }

            global $wpdb;
            $product_ids = $wpdb->get_results($wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s'", $pid));
            foreach ($product_ids as $product_id) {
                $elem = $product_id->post_id;

                if ($price != "") {
                    update_post_meta($elem, '_price', $price);
                    update_post_meta($elem, '_sale_price', $price);
                    update_post_meta($elem, '_regular_price', $price);
                }

                if ($title != "") {
                    wp_update_post(array(
                        'ID'           => $elem,
                        'post_title'   => $title,
                    ));
                }
            }
            echo "<p>Produkt #".$pid;
            if ($price != "") {
                echo " - new price: ".$price."€";
            }
            if ($title != "") {
                echo "- new title: ".$title;
            }
        }
    } else {
        echo "<form method=\"post\" enctype=\"multipart/form-data\">";
        echo "<label for=\"file\">Select a file:</label>";
        echo "<input type=\"file\" name=\"userfile\" id=\"file\">";
        echo "<br /><br />";
        echo "<button>Upload File</button>";
        echo "<form>";
    }
}

我非常感谢您的投入。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

<form action="<?=admin_url( 'admin-post.php' ) ?>" method="POST">
    <input type="hidden" name="action" value="my_custom_plugin_action"/>
    <input type="submit" value="SEND"/>
</form>

add_action( 'admin_post_nopriv_my_custom_plugin_action',array( "class_that_owns_that_function", 'show_upload_form' ) );

public function show_upload_form()
{
    //Here write your code
}

答案 1 :(得分:0)

在第二次或第三次停用并分别重新激活所有插件之后,问题消失了。猜猜这将仍然是个谜...