编辑-------- 问题解决了,代码见我下面的回复!
抱歉英语不好。 我正在对主题进行更改,以便能够从仪表板前端进行批量更改。 我已经设法通过简单的按钮、一个函数和一点点 JS 为单个帖子提供相同的功能。
现在我想批量做同样的事情,但如果在读取每个帖子的 ID 之前它是按钮,现在它必须是一个复选框,它必须作为一个 ID 数组返回给函数。
我做了一些测试,代码可以正常工作,但并不完全。
因为现在我可以执行操作,但只能针对单个帖子,即使我检查了所有帖子,它也只会对选中的第一个帖子执行操作。
我猜是php中的函数写错误,应该把propID值作为数组传给它,或者每个帖子都做一个foreach(笑)。但是我不太明白该怎么做,您有什么建议吗?
这是我的代码:
按钮:
<button type="button" class="multi-on-hold btn btn-primary btn-sm">Premi</button>
复选框:
<input type="checkbox" class="multicheck_prop" name="multicheck_prop[]" value="<?php echo ($post->ID); ?>">
功能:
add_action( 'wp_ajax_multicheck_houzez_on_hold', 'multicheck_houzez_on_hold' );
if ( !function_exists( 'multicheck_houzez_on_hold' ) ) {
function multicheck_houzez_on_hold() {
if ( isset( $_POST['propID'] ) ) {
global $wpdb;
if (! isset( $_POST['propID'] ) ) {
wp_die('No post to put on hold has been supplied!');
}
$post_id = absint( $_POST['propID'] );
$post_status = get_post_status( $post_id );
if($post_status == 'publish') {
$post = array(
'ID' => $post_id,
'post_status' => 'on_hold'
);
} elseif ($post_status == 'on_hold') {
$post = array(
'ID' => $post_id,
'post_status' => 'publish'
);
}
$post_id = wp_update_post($post);
}
return true;
}
}
js:
$('.multi-on-hold').on( 'click', function( e ) {
e.preventDefault();
var $this = $( this );
var propid = $this.data( 'property' );
var checkboxVals = $('.multicheck_prop');
var vals = $('.multicheck_prop:checked').map(function(){return this.value;}).get().join(',')
if(vals == "") {
return;
}
$.ajax({
url: ajax_url,
data: {
'action': 'multicheck_houzez_on_hold',
'propID': vals,
},
method: 'POST',
dataType: "JSON",
beforeSend: function( ) {
//window.alert(vals)
houzez_processing_modal(processing_text);
},
success: function( response ) {
window.location.reload();
},
complete: function(){
}
});
});
答案 0 :(得分:1)
由于您想向 PHP 发送许多 ID,您可以按照您指出的那样循环遍历它们。 这将支持一个或多个 ID:
vec_c
答案 1 :(得分:0)
问题在于您定义为数组的复选框名称 multicheck_prop[]
,因此您必须以数组的形式访问。检查下面的代码。
add_action( 'wp_ajax_multicheck_houzez_on_hold', 'multicheck_houzez_on_hold' );
if ( !function_exists( 'multicheck_houzez_on_hold' ) ) {
function multicheck_houzez_on_hold() {
global $wpdb;
if (! isset( $_POST['propID'] ) ) {
wp_die('No post to put on hold has been supplied!');
}
if( !empty( $_POST['propID'] ) ){
foreach ( (array) $_POST['propID'] as $key => $propID ) {
$post_id = absint( $propID );
$post_status = get_post_status( $post_id );
if($post_status == 'publish') {
$post = array(
'ID' => $post_id,
'post_status' => 'on_hold'
);
} elseif ($post_status == 'on_hold') {
$post = array(
'ID' => $post_id,
'post_status' => 'publish'
);
}
$post_id = wp_update_post($post);
}
wp_send_json_success();
}
wp_send_json_error();
}
}
答案 2 :(得分:0)
问题已解决!我改了一段代码来识别数组中的'ID'并实现@Suver1的解决方案。
感谢您的建议!
这是我的工作代码:
$('.multi-on-hold').on( 'click', function( e ) {
e.preventDefault();
var $this = $( this );
var propid = $this.data( 'property' );
//var Nonce = $this.data('nonce');
var checkboxVals = $('.multicheck_prop');
//var vals = $('.multicheck_prop:checked').map(function(){return this.value;}).get().join(',')
var vals = $('.multicheck_prop:checked').map(function(){return this.value;}).toArray();
if(vals == "") {
return;
}
$.ajax({
url: ajax_url,
data: {
'action': 'multicheck_houzez_on_hold',
'propID': vals,
},
method: 'POST',
dataType: "JSON",
beforeSend: function( ) {
//window.alert(vals), // See the value of any ID
houzez_processing_modal(processing_text);
},
success: function( response ) {
window.location.reload();
},
complete: function(){
}
});
});
if ( !function_exists( 'multicheck_houzez_on_hold' ) ) {
function multicheck_houzez_on_hold() {
if ( isset( $_POST['propID'] ) ) {
global $wpdb;
if (! isset( $_POST['propID'] ) ) {
wp_die('No post to put on hold has been supplied!');
}
// convert propID to array if it isnt -- Thanks to Suver1
$post_ids = !is_array($_POST['propID']) ? [$_POST['propID']] : $_POST['propID'];
foreach ($post_ids as $post_id) {
$post_status = get_post_status( $post_id );
if($post_status == 'publish') {
$post = array(
'ID' => $post_id,
'post_status' => 'on_hold'
);
} elseif ($post_status == 'on_hold') {
$post = array(
'ID' => $post_id,
'post_status' => 'publish'
);
}
$post_id = wp_update_post($post);
} // End foreach
} // End IF
return true;
} // End this function
} // End function exists