请原谅我的英语 - 我创建了一个_POST表单,用户可以在其中填写两个数字字段,然后乘以并除以一些常量,以在提交表单时输出结果。我正在使用相同的页面执行表单 ($ _SERVER [ “PHP_SELF”]); 代码非常基础,适用于我测试它的服务器(如果需要可以复制和粘贴)。
现在我想在Wordpress页面上使用这个小“计算器”(我正在运行Avada主题),但我完全不知道如何替换($ _SERVER [“PHP_SELF”])。 / p>
我试过了: - 复制和粘贴整个片段,就像它在融合构建器的代码块中一样>我收到一个错误 - 将变量和计算存储在要调用的单独.php文件中 - 硬编码或使用bloginfo()函数 - 使用嵌入的代码创建新模板页面
...但是当我提交表单时,我只被重定向到附加的php文件或主页。
我是否想做一些完全错误的事情?
我非常感谢任何帮助,因为我真的不明白这是如何起作用的......
非常感谢!
答案 0 :(得分:1)
最好在functions.php中编写php代码并创建其短代码并在页面中使用该短代码。例如:
I/AmazonHttpClient: Unable to execute HTTP request: Unable to resolve host "cognito-identity.us-east-1.amazonaws.com": No address associated with hostname
java.net.UnknownHostException: Unable to resolve host "cognito-identity.us-east-1.amazonaws.com": No address associated with hostname
at java.net.InetAddress.lookupHostByName(InetAddress.java:400)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
at java.net.InetAddress.getAllByName(InetAddress.java:220)
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:441)
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:280)
at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:128)
at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:65)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:353)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:196)
at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:533)
at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId(AmazonCognitoIdentityClient.java:344)
at com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:170)
at com.amazonaws.auth.AWSEnhancedCognitoIdentityProvider.refresh(AWSEnhancedCognitoIdentityProvider.java:76)
at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:537)
at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:370)
at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:440)
at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:76)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4198)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1618)
at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.uploadSinglePartAndWaitForCompletion(UploadTask.java:174)
at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:74)
at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:40)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
答案 1 :(得分:0)
我希望我理解你的正确。
您无法在Wordpress帖子或页面中运行PHP。它不是那样构建的。
在functions.php
内创建一个短代码。这允许您从帖子和页面中调用函数。你可能已经看过他们了。看起来像[gallery limit="5"]
http://www.smashingmagazine.com/2012/05/wordpress-shortcodes-complete-guide/
如果你真的想在你的页面内运行PHP。查看https://wordpress.org/plugins/insert-php/
答案 2 :(得分:0)
我刚在WordPress页面模板上测试了这个。
确保它没有放入循环内!
我已经进行了一个简单的计算,当您向其提交数字输入时,结果会被回显 - 显然可能会有一个跨度或者它需要的任何东西。计算可以包含你想要的任何东西。
您还应该能够include
计算表:
include "calculations.php";
这些是围绕使用includes
http://green-beast.com/blog/?p=144
PHP_SELF转到index.php,因为那是主模板。
如果您想使用<?php echo $_SERVER['REQUEST_URI']; ?>
进行操作以使其以编程方式完全正常工作,则需要使用REQUEST_URI
,但硬编码的网址应该有效(尽管不是最佳做法且 <form name="form" action ="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" method="post">
确实有效)
如果您使用它,您需要使用内置的WordPress转义符来对URI进行清理,因为您将“获取”其中的任何内容。
<form name="form" action ="http://the full url of the page this script is on/" method="post">
<input type="number" name="number_in">
<input type="submit" name="submit">
</form>
<?php $result = (int) $_POST['number_in'] * 4;
echo $result;
?>
有效地为您提供:
$_SESSION['number_in'] = $_SESSION['number_in'] + $result;
echo $_SESSION['number_in'];
如果您希望它在每个表单提交中连续添加到结果中,您可能需要使用隐藏的输入或会话变量获得一些trixy - 您可以使用:
action=""
保持累积结果的运行记录,因为会话已经为WordPress激活。
使用(int)执行类型转换 - 如果你知道它将是一个整数 - 否则float应该这样做。这应该避免需要进一步清理输入。可能是php.net http://php.net/manual/en/language.types.integer.php
上的一个方便参考这解释了隐藏输入的基本用法。
Get and echo inputs from textarea repeatedly
原则上,您可以将该行动留空并将其提交给自己{{1}},但这里有一个很好的讨论,为什么这样做可能不是一个好主意。虽然它会起作用,但它会让你劫持并注入攻击。 stackoverflow.com/questions/1131781/
虽然你可以在WordPress中运行php代码,但无论你是否应该进行完全不同的讨论......