gpt4 book ai didi

php - 最近在插件中创建的 PHP 文件未运行 WordPress PHP 函数

转载 作者:行者123 更新时间:2023-11-29 15:32:28 33 4
gpt4 key购买 nike

更新

在仔细查看此问题是如何复制后,我发现我已将表单处理程序脚本包含在 require_once 中。我的主要依赖处理程序脚本中的语句。 $wpdb当脚本加载到网站的管理或公共(public)页面上时,类只会使用硬编码的值数组启动。一旦我从依赖脚本中取出文件,$wpdb无论是否有硬编码值,问题都变得一致。我得出的结论是,问题在于该文件与 WordPress 其余部分的连接(?),因为它甚至没有响应像 get_header(); 这样的核心功能。或get_footer(); ,它的作用就像一个独立的 PHP 文件。

我已重新启动 Apache 和 MySQL 以确保服务器是最新的。

我的主要插件文件包含在 /wp-content/plugins/myplugin

呈现表单的短代码函数包含在 /wp-content/plugins/myplugin/shortcodes/ 中。

被调用来处理表单的脚本位于 /wp-content/plugins/myplugin/processes/

原始问题:wpdb INSERT 适用于示例数组,但不适用于相同的 $_POST 数组

我正在创建一个自定义表单,仅供管理员在前端使用。这样做的目的是将一笔费用记录到mysql的数据库表中。我尝试了多种创建查询的方法,使用 wpdb->insertwpdb->prepare但它不适用于 $_POST超全局化。

我创建了一个名为 $sample_data 的相同硬编码数组,并以完全相同的方式迭代它。使用各种后echovar_dump语句,我发现全局变量 $wpdb如果我使用 $_POST 则不会启动,但如果 $_POST 则效果很好未包含在我的代码中。

我对此很陌生,所以我想了解我做错了什么以及为什么这不起作用。任何帮助将不胜感激。

这是我正在使用的设置:

Ubuntu 18.04.01 本地主机、WordPress 5.2.4、PHP 7.2、MySQL 5.7.27、Apache 2.4.29

我的 WordPress 安装中安装的唯一事件插件是我正在使用的插件,并且我正在运行应用了简单 CSS 样式的 Underscores 主题。

这是我的代码供您引用:

$table_name = $wpdb->prefix.'expenses';

if(isset($_POST['submit'])){
foreach($_POST as $post_object => $post_value){
if($post_value != NULL && $post_value !== 'submit'){
$post_object_array[] = $post_object;
$post_placeholder_array[] = '%s';
$post_value_array[] = $post_value;
}
}
$table_columns = "(".implode(', ', $post_object_array).")";
$table_placeholders = "(".implode(', ', $post_placeholder_array).")";
$query_builder = "INSERT INTO bsynfs_expenses $table_columns VALUES $table_placeholders";
$prepare_query = $wpdb->prepare($query_builder, $post_value_array);
$result = $wpdb->query($prepare_query);
}

这是我的 form是在前端编码的。它是我的插件中短代码 .php 文件的一部分:

  <form id="add_expense" action="<?php echo($plugin_directory_url.'processes/expense-process.php'); ?>" method="post">
<input type="text" name="expense_type" value="" placeholder="expense_type">
<input type="text" name="grocery_vendor" value="" placeholder="grocery_vendor">
<input type="text" name="laundry_vendor" value="" placeholder="laundry_vendor">
<input type="text" name="product_skus" value="" placeholder="product_skus">
<input type="text" name="expense_reference" value="" placeholder="expense_reference">
<input type="text" name="expense_description" value="" placeholder="expense_description">
<input type="submit" name="submit" value="submit" id="add_expense_submit">

最佳答案

试试这个,对我来说它在这里有效。1 - 在模板中创建一个文件并添加此代码,然后在管理中创建一个页面并选择模板“测试”或任何您想要的名称。

然后测试一下

<?php 
/*
Template Name: Teste
*/
global $wpdb;
$table_name = $wpdb->prefix.'expenses';

if(isset($_POST['submit'])){
echo "<pre>";
print_r($_POST);
echo "</pre>";
exit();

foreach($_POST as $post_object => $post_value){
if($post_value != NULL && $post_value !== 'submit'){
$post_object_array[] = $post_object;
$post_placeholder_array[] = '%s';
$post_value_array[] = $post_value;
}
}
$table_columns = "(".implode(', ', $post_object_array).")";
$table_placeholders = "(".implode(', ', $post_placeholder_array).")";
$query_builder = "INSERT INTO bsynfs_expenses $table_columns VALUES $table_placeholders";
$prepare_query = $wpdb->prepare($query_builder, $post_value_array);
$result = $wpdb->query($prepare_query);
}

get_header();
?>
<form id="add_expense" action="<?php echo get_permalink(); ?>" method="POST">
<input type="text" name="expense_type" value="" placeholder="expense_type">
<input type="text" name="grocery_vendor" value="" placeholder="grocery_vendor">
<input type="text" name="laundry_vendor" value="" placeholder="laundry_vendor">
<input type="text" name="product_skus" value="" placeholder="product_skus">
<input type="text" name="expense_reference" value="" placeholder="expense_reference">
<input type="text" name="expense_description" value="" placeholder="expense_description">
<input type="submit" name="submit" value="submit" id="add_expense_submit">
</form>
<?php
get_footer();

或在文件/wp-content/plugins/myplugin/processes/中:

<?php
require_once '../../../wp-load.php';


global $wpdb;
$table_name = $wpdb->prefix.'expenses';

if(isset($_POST['submit'])){
echo "<pre>";
print_r($_POST);
echo "</pre>";
exit();

foreach($_POST as $post_object => $post_value){
if($post_value != NULL && $post_value !== 'submit'){
$post_object_array[] = $post_object;
$post_placeholder_array[] = '%s';
$post_value_array[] = $post_value;
}
}
$table_columns = "(".implode(', ', $post_object_array).")";
$table_placeholders = "(".implode(', ', $post_placeholder_array).")";
$query_builder = "INSERT INTO bsynfs_expenses $table_columns VALUES $table_placeholders";
$prepare_query = $wpdb->prepare($query_builder, $post_value_array);
$result = $wpdb->query($prepare_query);

}

关于php - 最近在插件中创建的 PHP 文件未运行 WordPress PHP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58585784/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com