не могу получить доступ к $ wpdb после вызова функции php для отображения моих сообщений через ajax - PullRequest
0 голосов
/ 07 октября 2011

Привет, я хотел бы иметь список, который отображает архивы группы сообщений по годам когда пользователи нажимают на годы, сообщения будут отображаться

Я использую ajax для вызова functions.php, и внутри есть функция получит сообщения, но я не могу получить доступ к $ wpdb?

Большое спасибо!

HTML:

<ul id="years">
<?php
$months = $wpdb->get_results("SELECT DISTINCT YEAR( post_date ) AS year,post_title as     title, ID as post_id, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status =     'publish' and post_date <= now( ) and post_type = 'post' GROUP BY year ORDER BY post_date   DESC");
foreach($months as $month) : ?>
<li>
<a href="" onClick="year_to_post_titles(<?php echo $month->year; ?>)">
<?php if(in_category("photography",$month->post_id)){
echo $month->year;
} ?>
</a>
</li>
<?php endforeach; ?>
</ul>

Аякс:

<script>

function year_to_post_titles(year){
var find_titles="find_titles";
//request ajax
if(window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//state change
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4&& xmlhttp.status==200){
document.getElementById("work_items").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","<?php bloginfo(template_directory) ?>/functions.php?func=find_titles&y="+year,true);
xmlhttp.send()
}

</script>

functions.php:

 <?php
$which_func=$_GET["func"];
if(function_exists($which_func)){
    find_titles();
};

function find_titles(){
global $wpdb;
$which_year=$_GET["y"];
$titles = $wpdb->get_results("SELECT DISTINCT YEAR( post_date ) AS year,post_title as title, ID as post_id, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' GROUP BY year ORDER BY post_date DESC");
foreach($titles as $var_title){
echo "<li><a href=''>";
if(in_category("photography",$var_title->post_id)){
    echo $var_title->title;
    } 
echo "</a></li>";
}
}
?>

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Кроме того, вы не должны делать это:

<?php
$which_func=$_GET["func"];
if(function_exists($which_func)){
    $which_func();
};
?>

Если вы сделаете это, пользователь сможет вызывать любые существующие функции (например, phpinfo () для примера, но это может быть хуже с небольшим воображением). Это огромное нарушение безопасности.

0 голосов
/ 07 октября 2011

Когда вы вызываете functions.php через AJAX, файл не имеет глобальной переменной с именем $wpdb. Это неудивительно, потому что обычно functions.php не заботится об этом. Вместо этого вам нужно зарегистрировать функцию обратного вызова AJAX PHP в wordpress . Тогда $wpdb доступно.

...