我使用Toolset插件创建了一个名为request
的自定义帖子类型。
我需要在这些管理页面中添加一个按钮(仅适用于此自定义帖子类型(:
-
新
request
(post-new.php( -
编辑
request
(post.php(
当管理员提交按钮时,我需要发送一封包含帖子信息的电子邮件(没有问题(。
如何添加要提交的按钮和回调?
向后期编辑屏幕添加新元素的一种方法是通过元盒。
请检查以下代码:
/**
* Adds a call-to-action metabox to the right side of the screen under the "Publish" box.
*/
function wp645397_add_cta_metabox() {
add_meta_box(
'wp645397_request_cta',
'Call-to-action title here', /* This is the title of the metabox */
'wp645397_request_cta_html',
'request', /* the request post type */
'side',
'high'
);
}
add_action( 'add_meta_boxes', 'wp645397_add_cta_metabox' );
/**
* Output the HTML for the call-to-action metabox.
*/
function wp645397_request_cta_html() {
global $post;
// Nonce field to validate form request came from current site
wp_nonce_field( 'request_send_post_details', 'request_cta_nonce' );
// Output the call-to-action button
?>
<a href="#" id="btn-call-to-action" class="button button-primary widefat">Call-to-action button text here</a>
<script>
/**
* We'll handle the button via Ajax to avoid having to reload the screen.
*/
jQuery(function($){
// Handle button click
$( "#wp645397_request_cta #btn-call-to-action" ).on("click", function(e){
e.preventDefault();
// Get the security nonce
var nonce = $(this).parent().find("#request_cta_nonce").val();
// Send the data via AJAX
$.post(
ajaxurl,
{
action: 'send_request_email',
nonce: nonce,
postid: <?php echo $post->ID; ?>
},
function( response ){
// Do something after the data has been sent
if ( 'OK' == response ) {
alert( 'Info sent' );
}
else {
alert( 'Something went wrong, try again' );
}
}
);
});
});
</script>
<?php
}
/**
* Handles CTA AJAX.
*/
function wp645397_send_request_email(){
// Invalid nonce
if ( !isset( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'request_send_post_details' ) ) {
wp_die( 'error' );
}
$post_ID = $_POST['postid'];
// Get post data
$post = get_post( $post_ID );
// Get post title
$post_title = $post->post_title;
// Get custom field, etc
// @TODO
// Send e-mail with data
// @TODO
wp_die('OK');
}
add_action( 'wp_ajax_send_request_email', 'wp645397_send_request_email' );
它的作用:
- 在右侧"发布"框的正上方添加自定义元盒
- 当用户点击";此处的调用操作按钮文本";按钮(记住要重命名它!(,它将通过Ajax将当前帖子(请求(的ID发送到一个名为
wp645397_send_request_email
的函数,您需要在该函数中处理数据并发送电子邮件
我在代码中添加了一些注释,应该可以解释发生了什么。如果你有任何问题,请毫不犹豫地问,好吗?
我不确定工具集插件提供了什么选项,但如果我用程序来做这件事,我会做一些类似的事情
$post_types = array('post', 'page');
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names'; // names or objects, note names is the default
$operator = 'and'; // 'and' or 'or'
$fetch_post_types = get_post_types($args, $output, $operator);
foreach ($fetch_post_types as $key => $value) {
if ($value != 'vocabulary' && $value != 'augmentation') {
array_push($post_types, $value);
}
}
add_meta_box('email_sender_post_type_metabox', __('Email Options', 'seoaipdl'), 'email_sender_post_type_metabox', $post_types, 'side', 'high', null);
function email_sender_post_type_metabox() {
//Button HTML code here
}
add_action('save_post', 'save_meta_data_function', 10, 2);
function save_meta_data_function($id, $data) {
if (!current_user_can("edit_post", $id)) {
return $data;
}
if (defined("DOING_AUTOSAVE") && DOING_AUTOSAVE) {
return $data;
}
\$_POST variable will have your submit button here.
}
或者,您可以使用jquery添加一个按钮,并在单击该按钮时使用ajax触发您的电子邮件功能。
为此,您需要查看admin_enqueue_script
和wp_localize_script