如何在管理菜单页面中添加/更新POST META?

时间:2012-07-28 作者:Daiwei

我想创建一个插件来批量管理帖子的自定义字段数据。我知道我可以通过在帖子编辑屏幕中添加一个元框来添加帖子元,并使用add_action(\'save_post\',\'function_to_update_meta\') 触发添加元函数。

但我不知道如何触发add_post_meta 管理菜单页面中的函数(例如自定义管理菜单)。如何做到这一点?

提前感谢您!

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

您需要使用Ajax function. 这需要javascript将表单数据发送到php Ajax函数,您可以使用该函数运行update\\u post\\u meta();

示例:

表单Html:

<form>
<input id="meta" type ="text" name="2344" value="<?php echo esc_html( get_post_meta( 2344, \'_your_key\', true) ); ?>" />
</form>
Javascript:

jQuery(document).ready(function() {
    jQuery("form").submit(function() {
    var post_meta = jQuery("input name=[2344]").val();
    var ID = jQuery(this).attr("name");

    jQuery.ajax({
           type: "POST",
           url: ajaxurl,
           data: {
           action: "update_meta",
           post_id: ID,
           meta: post_meta,
          },
        success: function( data ) {
          //do something
     }
   });
 return false;

});
PHP函数:

add_action( \'wp_ajax_update_meta\', \'my_function\' );
function my_function() {
   $post_id = $_POST[\'post_id\'];
   $meta = $_POST[\'post_meta\'];

  update_post_meta( $post_id, \'_your_key\', $meta );

  echo \'Meta Updated\';
  die();
}

SO网友:Daiwei

我添加了一些控制台。记录函数进行测试,但这基本上与@Chris\\()答案相同:

用于生成菜单内容的菜单回调函数(PHP):

function ajax_menu_callback() {
?>
<div class="wrap">
    <div id="icon-themes" class="icon32"></div>
    <h2>Test</h2>
    <br />
    <form>
        <input id="meta" type ="text" name="1" value="<?php echo esc_html( get_post_meta( 1, \'your_key\', true) ); ?>" />
        <?php submit_button(); ?>
    </form>
</div>
<?php
}
然后在管理端打印javascript(javascript,不要忘记包含jquery库):

jQuery(document).ready(function() {
    $("form").submit(function() {
        console.log(\'Submit Function\');
        var postMeta = $(\'input[name="1"]\').val();
        console.log(postMeta);
        var postID = 1;
        var button = $(\'input[type="submit"]\');
        button.val(\'saving......\');
        $.ajax({
            data: {action: "update_meta", post_id: postID, post_meta: postMeta, },
            type: \'POST\',
            url: ajaxurl,
            success: function( response ) { console.log(\'Well Done and got this from sever: \' + response); }
        }); // end of ajax()
        return false;
    }); // end of document.ready
}); // end of form.submit
然后PHP函数handle update\\u post\\u meta(PHP):

add_action( \'wp_ajax_update_meta\', \'my_ajax_callback\' );
function my_ajax_callback() {
    $post_id = $_POST[\'post_id\'];
    $post_meta = $_POST[\'post_meta\'];
    update_post_meta( $post_id, \'your_key\', $post_meta );
    echo \'Meta Updated\';
    die();
} // end of my_ajax_callback()

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在