如何正确地将GET请求发送到file.php以及将该file.php存储在哪里?

时间:2017-04-08 作者:Daniel Davis

在w3schools或其他任何地方,我都见过以链接或形式使用php文件。但在我尝试创建了9000多次带有php文件get请求的链接之后,Wordpress从未让我这样做。这就是我正在做的:

这是Wordpress模板的一部分,我从DB中获取值,并创建缩略图,其中包含每个值的链接:

<?php
global $wpdb;
$wp_albums = $wpdb->get_results("SELECT * FROM mngr_albums ORDER BY Releasedate");

 foreach($wp_albums as $a) :
 echo \'<a href="javascript: loadDoc()">\' ?>

<div class="col-xs-4 col-sm-4 col-md-4 col-lg-4" name="albums">
<div class="thumbnail col-xs-12 col-sm-12 col-md-12 col-lg-12" name="albums">

<?php
echo \'<img src="\' . $a->Image . \'" width="320" height="320" alt="\'. $a->Image .\'">\';
echo \'<br><p style="text-align: center" id="artist" name="\'.$a->Artist.\'">\'.$a->Artist.\'</p>\';
echo \'<p style="text-align:center; font-size:18px" id="album" name="\'.$a->Album.\'">\'.$a->Album.\'</p>\'; ?>

</div>
</div>
</a>

<?php endforeach; ?>
创建链接后,我在同一模板中使用AJAX请求生成函数:

<script>
function loadDoc() {
 var xhttp = new XMLHttpRequest();
 xhttp.onreadystatechange = function() {
 if (this.readyState == 4 && this.status == 200) {
  document.getElementById("container").innerHTML = this.responseText;
  }
 };
 var artist = document.getElementById("artist").getAttribute("name");
 var album = document.getElementById("album").getAttribute("name");
 xhttp.open("GET", "?artist=" + artist + "&album=" + album, true);
 xhttp.send();
} 
</script>
因此,在get请求之前?artist=" + artist + "&album=" + album 我需要使用此脚本放置指向文件的链接:

<?php

$artist = $_REQUEST["artist"];
$album = $_REQUEST["album"];

$tracks = $wpdb->get_results("SELECT * FROM mngr_tracks WHERE Artist = \'".$artist."\' AND Album = \'".$album."\'"); 

echo \'<ul id="list" style="z-index: 1000">\';
foreach($tracks as $t) {
echo \'<li>\';
echo \'<a href="javascript: track()" id="track" name="\'.$t->FileName.\'">\'.$t->Track.\'</a>\';
echo \'</li>\';
}
echo \'</ul>\'; 

if($_REQUEST[\'file\'] != \'\') {
    $file = $_REQUEST[\'file\'];
    echo $file;

    $p = $wpdb->get_results("SELECT FileDir FROM mngr_tracks WHERE FileName=\'". $file ."\'"); 

    foreach ($p as $pat) {
    $path = $pat->FileDir;
    }
}
?>
让我们在步骤3中调用脚本file.php. 我需要将其放置在何处以实现get请求?我试着把它保存在C:\\wordpress\\htdocs\\wp-content\\themes\\this-theme 并通过127.0.0.1\\wordpress\\wp-content\\themes\\this-theme\\file.php?album=Album&artist=Artist -- 它从来没有起过作用。我还尝试将步骤3中的代码放入functions.php 向它发出请求,就像\\functions.php?album=Album&artist=Artist -- 没有什么

我想也许file.php 不是由服务器上的PHP处理的,但当我打开时,它总是显示空白页而不是代码127.0.0.1\\wordpress\\wp-content\\themes\\this-theme\\file.php 在浏览器中。

我需要把file.php? 在发出get请求时,我需要如何从客户端访问它?

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

不建议这样做,但如果要这样做,请按以下方式执行:

将文件保存在WordPress的根文件夹中,就在index.php. 然后,需要WordPress的核心文件,通过以下代码:

define(\'WP_USE_THEMES\', false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require(\'wp-load.php\');
现在,即使该文件实际上不是WordPress的一部分,也可以将其视为一个文件,您可以使用它做任何事情。

但是,这可能会导致安全问题,因此我建议您仅出于教育目的尝试。

要使用AJAX与WordPress通信,请改用Rest API。您可以在中找到一个简单的解决方案this 答复

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请