我正在尝试将AJAX数据发送到我的 wordpress 表,但我从PHP获得的只是0
。它在管理方面。任何人都可以帮助我吗?
此外,所有代码都在我的插件文件夹中的plugin-admin.php
文件中。
<?php
if ( ! defined( 'ABSPATH' ) || ! current_user_can( 'manage_options' ) ) exit;
global $wpdb;
global $wp_version;
$results = $wpdb -> get_results(
"
SELECT ID, post_title, post_excerpt
FROM $wpdb->posts
WHERE post_type = 'post' and post_status NOT LIKE 'auto-draft'
AND post_title NOT LIKE 'Auto Draft'
AND post_status = 'publish'
ORDER BY post_title
"
);
add_action( 'wp_ajax_featured_submit_action', 'featured_submit_callback' );
function featured_submit_callback(){
echo "hi";
wp_die();
}
?>
<div class="wrap">
<h2>Select Posts</h2>
<select id="selected-posts" multiple="multiple">
<?php
foreach ( $results as $result ){
?><option value="<?php echo $result->ID; ?>"> <?php echo $result->post_title; ?> </option> <?php
}
?>
</select>
<br>
<input type="submit" id="sposts-submit"></input>
</div>
<script>
jQuery(document).ready(function($) {
var spostsarray = new Array();
//Click button
$("#sposts-submit").click(function(){
var spostsarray = new Array();
$("#selected-posts").each(function(item){
spostsarray.push( $(this).val() );
});
console.log(spostsarray);
var data = {
"action": "featured_submit_action",
"posts": spostsarray
}
$.ajax({
url: "<?php echo admin_url('admin-ajax.php'); ?>",
type: "POST",
action: "featured_submit_action",
data: {"posts": spostsarray},
success: function(data){
console.log(data);
}
});
});
});
</script>
我已经将它浓缩了一点,但一般的想法是我可以抓住所有最近的帖子,用户可以选择他们想要的功能,将其发送到PHP方法并使用它编辑表格。
问题在于我的AJAX回调我只返回0
而不是从javascript发送的数据。
解决: 在Rohil_PHPBeginner的帮助下,我发现了它。它不起作用的原因是我从菜单页面执行代码,此时添加一个钩子为时已晚。这是我用来解决它的页面:
答案 0 :(得分:1)
下面的代码对我来说非常合适:
<?php
global $wpdb;
global $wp_version;
$results = $wpdb -> get_results(
"
SELECT ID, post_title, post_excerpt
FROM $wpdb->posts
WHERE post_type = 'post' and post_status NOT LIKE 'auto-draft'
AND post_title NOT LIKE 'Auto Draft'
AND post_status = 'publish'
ORDER BY post_title
"
);
?>
<div class="wrap">
<h2>Select Posts</h2>
<select id="selected-posts" multiple="multiple">
<?php
foreach ( $results as $result ){
?><option value="<?php echo $result->ID; ?>"> <?php echo $result->post_title; ?> </option> <?php
}
?>
</select>
<br>
<input type="submit" id="sposts-submit"></input>
</div>
<?php
add_action( 'wp_ajax_featured_submit_action', 'featured_submit_callback' );
add_action( 'wp_ajax_nopriv_featured_submit_action', 'featured_submit_callback' );
function featured_submit_callback(){
echo "hi";
wp_die();
}
?>
<script>
jQuery(document).ready(function($) {
//Click button
$("#sposts-submit").click(function(){
var spostsarray = new Array();
$("#selected-posts").each(function(item){
spostsarray.push( $(this).val() );
});
console.log(spostsarray);
var data = {
"action": "featured_submit_action",
"posts": spostsarray
}
$.ajax({
url: ajaxurl,
type: "POST",
data: data,
success: function(data){
console.log(data);
}
});
});
});
</script>
您不需要以这种方式传递AJAX网址,因为当我使用您的代码时,它会向我展示PHP。 WordPress为AJAX提供了一个默认URL,因此您可以使用它(我在下面的代码中使用的ajaxurl
)。
除此之外您还没有为no-privilege
用户添加代码(如果它仅用于特权用户,那么就可以了,否则您需要为此添加代码)。
答案 1 :(得分:1)
当ajax调用没有找到有效的回调函数时,WordPress返回0(尽管0可以从许多其他东西返回)。
WordPress会在用户登录时查找与wp_ajax_{callback}
匹配的回调,并在用户注销时查找wp_ajax_nopriv_{callback}
。 {callback}填充了&#34; action&#34;的POST&#39; d值。隐藏的输入。请注意,您未将action
传递给AJAX调用。你应该改变:
data: {"posts": spostsarray},
至
data: data
由于你不会在没有传递操作的情况下匹配回调函数,因此WordPress返回0