使用AJAX更新Post Meta的问题(看起来很简单,但搞不懂)

时间:2019-07-22 作者:Stephen Burks

首先,也最重要的是,感谢所有花时间回应的人。我是一个新的开发人员,我肯定我有一个误解或一些简单的东西,我错过了。我花了几个小时尝试不同的东西,但我不知道现在该尝试什么。下面您可以找到我的代码和问题的解释。

我试图实现的目标:本质上,我试图创建一个插件,从插件管理页面编辑我页面上的所有元描述。

考虑到这一点,我创建了一个非常简单的文件,其中包含了我试图实现的所有原则。我的想法是,一旦我弄清楚了这一部分,我就会找出合适的循环,以尝试实现我的最终目标。下面是尽可能精确的代码。再次感谢您的帮助-我已经测试了一段时间了,只是无法让这个该死的东西正常工作。

我收到了AJAX请求,要记录它成功了,所以我完全不知所措,因为它在刷新时不会保存或更新数据库。

    <?php
function ews_metas_add_admin_page() {
    // Adds plugin page to menu
    add_menu_page (\'Effective Web Solutions Metas Descriptions\', \'EWS Metas\', \'manage_options\', \'ews_meta_options_stephen_version\', \'ews_meta_page_creation_stephen\', get_template_directory_uri() . \'/images/admin-ico-gray.png\', 110 );
    //Activate custom settings
    add_action( \'admin_init\', \'display_metas_fields\');
}
add_action( \'admin_menu\', \'ews_metas_add_admin_page\'); ?>

<script>
    jQuery(document).ready(function() {
            jQuery(".toplevel_page_ews_meta_options_stephen_version form").submit(function() {
            var post_meta = jQuery("input.testing").val();
            var post_ID = jQuery("input.testing").attr("name");
            jQuery.ajax({
                type: "POST",
                url: \'https://dev.ewsproduction.com/dev6/ewstheme/wp-admin/admin-ajax.php\',
                data: {
                    action: "update_meta_descriptions",
                    post_id: post_ID,
                    post_meta: post_meta,
                },
                success: function( data ) {
                //do something
                console.log(\'It worked!\');
            }
        });
        return false;
        });
    });
</script>

<?php 
function ews_meta_page_creation_stephen() { ?>
<div>
    <?php settings_errors(); ?>
    <form method="post">
        <input id="meta" class="testing" type="text" name="4189" value="<?php echo esc_html( get_post_meta( 4189, \'_metadescs\', true ) ); ?>" />
        <?php submit_button();?>
    </form>
</div>
<?php } ?>

<?php add_action( \'wp_ajax_update_meta_descriptions\', \'update_meta_descriptions\' );
    function update_meta_descriptions() {
        $post_id = $_POST[\'post_id\'];
        $meta = $_POST[\'post_meta\'];
        update_post_meta( $post_ID, \'_metadescs\', $post_meta );
        echo \'Meta Updated\';
    die(); 
}?>

考虑到所有这些,我们将非常感谢您的帮助。我已经尝试了我能找到的一切,但没有运气。

对我的总体目标的任何洞察都是有益的——我试图最终创建一个插件,列出插件页面上每个页面的所有元和页面标题信息。然后,我想能够编辑和更新这些值从说插件页。

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

您犯了一些错误,我在下面描述了这些错误:

首先,您将jQuery Ajax代码放错了位置

  • 在某些地方,不是闭合的}括号
  • Here is the right code which I have modified in your code. Check this and let me know it\'s work for you or not. I have tested it works for me.

    <?php /*Register the Menu*/ 
    add_action( \'admin_menu\', \'ews_metas_add_admin_page\');
    function ews_metas_add_admin_page() { 
    // Adds plugin page to menu
    add_menu_page (\'Effective Web Solutions Metas Descriptions\', \'EWS Metas\', \'manage_options\', \'ews_meta_options_stephen_version\', \'ews_meta_page_creation_stephen\', get_template_directory_uri() . \'/images/admin-ico-gray.png\', 110 );
    } 
    
    /*Page Html Render*/
    function ews_meta_page_creation_stephen() { ?>
    <div>
    <?php settings_errors(); ?>
    <form method="post">
        <input id="meta" class="testing" type="text" name="2316" value="<?php echo esc_html( get_post_meta( 4189, \'_metadescs\', true ) ); ?>" />
        <?php submit_button();?>
    </form>
    </div>
    <script>
    jQuery(document).ready( function($){ 
    jQuery(".toplevel_page_ews_meta_options_stephen_version form").submit(function() {
            var post_meta = jQuery("input.testing").val();
            var post_ID = jQuery("input.testing").attr("name");
            jQuery.ajax({
                type: "POST",
                url: \'https://dev.ewsproduction.com/dev6/ewstheme/wp-admin/admin-ajax.php\',
                data: {
                    action: "update_meta_descriptions",
                    post_id: post_ID,
                    post_meta: post_meta,
                },
                success: function( data ) {
                //do something
                console.log(\'It worked!\');
            }
        });
        return false;
        });
    });
    </script>
    <?php }
    
    /*Update the meta using Ajax request */
    add_action( \'wp_ajax_update_meta_descriptions\', \'update_meta_descriptions\' );
    function update_meta_descriptions() {
      global $wpdb;
      $post_id = $_POST[\'post_id\'];
      $meta = $_POST[\'post_meta\'];
      $details = update_post_meta( $post_id, \'_metadescs\', $meta );
      echo \'Meta Updated\';
      die();
    }?>
    

    相关推荐

    WordPress循环中的WordPress AJAX PHP(Html)文件

    我有一个Wordpress AJAX调用,它可以从PHP文件中获取原始数据。AJAX使用的是管理AJAX。php文件。然而,我需要获取的PHP文件位于页面的循环中。如果它只是包含在页面上,那么它的放置位置就是它的工作位置。总结一下:如果AJAXed的PHP文件中包含:<?php echo \'this is the file!\' ?> …一切正常。但如果有:<?php the_title(); ?> …返回空白。感谢您抽出时间阅读此文!