具有通过AJAX更改分类术语的功能。这很有效,除了window.location.reload(true)
上的内容保持不变,即使已经进行了更改。请参阅下面的代码和GIF以了解。
这是一个在点击
上添加按钮和重新加载页面的示例if ( 'publish' === $post->post_status && $post->post_type === 'campaigns' ) {
$text = (in_category( 'live') ? 'Activate' : 'Activate');
echo '<li><a href="" onclick="window.location.reload(true);return toggleLive(this, ' . $post->ID . ');">' . $text . '</a></li>';
}
那么,是否有其他方法可以重新加载可能有帮助的页面onClick
?此外,修改后的日期未更新,但已对帖子进行了更改。
提前感谢您的帮助
编辑 -
我已经尝试过了
location.href = location.href;
和
document.location.reload();
附加信息 -
功能
add_action('wp_ajax_toggle_live', function(){
// Check ID is specified
if ( empty($_REQUEST['post']) ) {
die( __('No post ID specified.') );
}
// Load post
$post_id = (int) $_REQUEST['post'];
$post = get_post($post_id);
if (!$post) {
die( __('You attempted to edit an item that doesn&#8217;t exist. Perhaps it was deleted?') );
}
// Check permissions
$post_type_object = get_post_type_object($post->post_type);
if ( !current_user_can($post_type_object->cap->edit_post, $post_id) ) {
die( __('You are not allowed to edit this item.') );
}
// Load current categories
$terms = wp_get_post_terms($post_id, 'campaign_action', array('fields' => 'ids'));
// Add/remove Starred category
$live = get_term_by( 'live', 'campaign_action' );
$index = array_search($live, $terms);
if ($_REQUEST['value']) {
if ($index === false) {
$terms[] = $live;
}
} else {
if ($index !== false) {
unset($terms[$index]);
}
}
wp_set_object_terms( $post_id, 'live', 'campaign_action' );
die('1');
});
JS
function toggleLive(caller, post_id)
{
var $ = jQuery;
var $caller = $(caller);
var waitText = ". . .";
var liveText = ". . .";
var deactivateText = ". . .";
// Check there's no request in progress
if ($caller.text() == waitText) {
return false;
}
// Get the new value to set to
var value = ($caller.text() == liveText ? 1 : 0);
// Change the text to indicate waiting, without changing the width of the button
$caller.width($caller.width()).text(waitText);
// Ajax request
var data = {
action: "toggle_live",
post: post_id,
value: value
};
jQuery.post("<?php bloginfo( 'wpurl' ); ?>/wp-admin/admin-ajax.php", data, function(response)
{
if (response == "1") {
// Success
if (value) {
$caller.text(deactivateText);
} else {
$caller.text(liveText);
}
} else {
// Error
alert("Error: " + response);
// Reset the text
if (value) {
$caller.text(deactivateText);
} else {
$caller.text(liveText);
}
}
// Reset the width
$caller.width("auto");
});
// Prevent the link click happening
return false;
}
答案 0 :(得分:1)
是toggleLive发出AJAX请求的函数吗?您在点击之前立即呼叫重新加载,然后在后端反映更改。如果您正在使用Jquery,请在完整的回调函数中包含重新加载代码,该函数表示您的AJAX请求已完成。
答案 1 :(得分:0)
尝试在jquery中使用Live Query插件而不是live。
答案 2 :(得分:0)
我能够通过在JS中设置return trueOrFalse(bool);
并将该页面的永久链接添加到函数中的<a href="">
来实现此目的。
我相信@cdoshi的回答是正确的,但我无法做到这一点。我相信进一步的探索可以使这成为可能,但我的修复实现了我想要的,我的代码几乎没有变化。