您没有使用AJAX提交数据,因此不需要使用admin-ajax.php
以及wp_ajax
钩相反,您需要admin_post
钩
您需要对代码进行一些更改才能使其正常工作。首先,将窗体操作更改为<?php echo esc_url( admin_url(\'admin-post.php\') ); ?>
并在表单末尾添加隐藏的操作字段<input type="hidden" name="action" value="submit_filter">
.
这样,无论何时向WordPress发送请求,并且操作参数设置为“submit\\u filter”,钩子admin_post_submit_filter
将执行。
以下是表单代码的外观:
<form action="<?php echo esc_url( admin_url(\'admin-post.php\') ); ?>" method="post">
<?php wp_nonce_field( \'submit_filter\', \'my_filter_nonce\' ); ?>
<div class="small-6 medium-3 large-3 columns">
<div class="card">
<img src="<?php echo get_the_post_thumbnail_url( $posts[0]->ID, \'thumbnail\' ); ?>" class="" id="normal">
<div class="card-section">
<input type="submit" value="No Filter" name="normal">
</div>
</div>
</div>
<input type="hidden" name="action" value="submit_filter">
</form>
以及处理您的请求的功能代码:
add_action( \'admin_post_nopriv_submit_filter\', \'my_submission_filter\' );
add_action( \'admin_post_submit_filter\', \'my_submission_filter\' );
function my_submission_filter() {
$postid = get_the_ID();
$post_data = array(
\'ID\' => $postid,
\'post_status\' => \'publish\'
);
add_post_meta($postid, \'filter\', $_POST[\'filter\']);
wp_update_post( $my_post );
wp_redirect( site_url());
}
使用
is_wp_error
https://codex.wordpress.org/Plugin_API/Action_Reference/admin_post_(action)https://codex.wordpress.org/Function_Reference/is_wp_error