【问题标题】:Wordpress backend form returns JSONWordpress 后端表单返回 JSON
【发布时间】:2018-07-18 05:19:19
【问题描述】:

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

它在暂存环境中运行良好,但在实时服务器上出现了一个奇怪的问题。一旦我提交带有文件的表单,服务器不会将我带回同一页面,而是返回以下 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>";
    }
}

感谢任何意见。

【问题讨论】:

  • 表单是否有任何验证?或者任何电子邮件功能?
  • 表单本身不验证任何内容。 post 上的函数只是解析值(它是一个 csv 文件),然后相应地更新一些数据库条目。但它永远不会像 json 那样碍事。
  • 任何电子邮件功能或任何东西?
  • 如果可能的话,您能否也添加您的插件代码?
  • 我已经添加了剩余的代码。没有电子邮件功能。但正如我所说,我们永远不会达到那个代码......

标签: wordpress forms plugins


【解决方案1】:

试试这样的

<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
}

【讨论】:

  • 遗憾的是这会导致相同的结果,我仍然得到奇怪的 JSON 返回。
  • @asto。真奇怪
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2019-03-11
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多