发送不带发布按钮的元框输入数据

时间:2018-01-19 作者:scoteh nigout

我想在我的插件中添加meta框,但我想添加两个输入和一个类似submit按钮的按钮,当我单击submit按钮时,然后输入字段数据发送到数据库并接收,但如果没有publish按钮,这是可能的,我从来没有使用publish按钮。请提供有关简单代码的任何帮助。

密码

add_action( \'add_meta_boxes\', \'rt_book_sales\' );
add_action( \'wp_ajax_rt_book_name_rander\', \'rt_book_name_rander\' );
add_action( \'save_post\', \'rt_book_name_rander\', 10, 3 );
function rt_book_sales(){
add_meta_box( \'rt_bk_goal\', \'Meta Box Title\', \'rt_books_meta_rander\', \'post\', \'normal\', \'high\' );  
}
function rt_books_meta_rander(){
?>   
</div class= "wrap">
   <input  type="text" name="book_name" id="book_name" >
   <input  type="submit" class="rt_bk_btn">
</div>  
<?php
}
?>
和ajax jquery代码。

$(document).on(\'click\', \'.rt_bk_btn\', function(e) {          
e.preventDefault();
var bk_name = $(\'#book_name\').val();

var data = {
\'bk_name\': bk_name,
\'action\': \'rt_book_name_rander\',
}
$.post(ajaxurl, data, function(resp){   
console.log(resp);
});
和保存post功能。

function rt_book_name_rander(){
global $post;

if (isset($_POST[\'bk_name\'])) {
        $bk_name = $_POST[\'bk_name\'];
        update_post_meta( $post->ID, \'rt_book\', $bk_name );
    }

    die(0);
}
这是我的代码,当我使用get\\u post\\u meta()函数获取数据时,没有数据保存在数据库中。。我的问题在哪里。

1 个回复
最合适的回答,由SO网友:Shibi 整理而成

你可以像这样获得帖子id

var post_id = $(\'input[name="post_ID"]\').val();

请参阅完整的工作代码。顺便说一句,它只将值保存到ajax中的meta,不会保存在发布按钮上,您需要添加另一个带有其他函数的挂钩。您不能使用与ajax中相同的函数,因为die()

add_action( \'add_meta_boxes\', \'rt_book_sales\' );
add_action( \'wp_ajax_rt_book_name_rander\', \'rt_book_name_rander\' );
function rt_book_sales(){
    add_meta_box( \'rt_bk_goal\', \'Meta Box Title\', \'rt_books_meta_rander\', \'post\', \'normal\', \'high\' );
}

function rt_books_meta_rander($post){
?>
</div class= "wrap">
   <input type="text" name="book_name" id="book_name" value="<?php echo esc_attr(get_post_meta( $post->ID, \'rt_book\', true )); ?>">
   <input type="submit" class="rt_bk_btn">
</div>
<?php
}

add_action(\'admin_footer\', \'my_admin_add_js\');
function my_admin_add_js() {
    ?>
    <script>
        jQuery(document).ready(function($) {
            $(document).on(\'click\', \'.rt_bk_btn\', function(e) {
                e.preventDefault();
                var bk_name = $(\'#book_name\').val();
                var post_id = $(\'input[name="post_ID"]\').val();
                var data = {
                    \'post_id\': post_id,
                    \'bk_name\': bk_name,
                    \'action\': \'rt_book_name_rander\',
                }
                $.post(ajaxurl, data, function(resp){
                    console.log(resp);
                });
            });
        });
    </script>
    <?php
}

function rt_book_name_rander(){
    if (isset($_POST[\'bk_name\']) && isset($_POST[\'post_id\'])) {
        $bk_name = $_POST[\'bk_name\'];
        update_post_meta( $_POST[\'post_id\'], \'rt_book\', $bk_name );
    }

    die();
}

结束

相关推荐

订阅者对admin-ajax.php的AJAX调用返回主页

我正在调用管理ajax。php在自定义设置中更改前端帖子(CPT广告)(草稿/发布)的状态。这对管理员用户很好。但是,在对订阅服务器和控制台执行相同操作时。记录我得到的响应,返回主页的全部内容(甚至没有错误)。下面是我调用ajaxurl变量的代码:// AJAXURL VAR add_action(\'wp_head\', \'aii_ajaxurl\'); add_action(\'admin_head\', \'aii_ajaxurl\'); function aii_ajax