Пользовательский обратный вызов Meta Box Save_Post не запускается в functions.php

дочерняя тема, functions.php, я создаю метабокс. У меня есть два текстовых поля в пользовательском метабоксе. Мне нужно сохранять поля в любое время, когда пользователь нажимает «обновить» или «опубликовать» из сообщения администратора «Добавить». Это мета-поле разрешено появляться в сообщениях союзников, включая пользовательские сообщения.

Я использую PHP7.3, WordPress 5.3.

Я пытался: 1) использовать другие хуки, такие как save_edit_post, admin_init, publish_post и т. д.

2) предоставить значение приоритета для add_Action

3) Просмотренный почтовый запрос HTTP для подтверждения передачи пар мета-ключ-значение — Да, это.

4) использовал get_post_meta() и глобальную переменную $POST для проверки прохождения значений — но не смог проверить.

function add_taddressbox_address_meta_box() {
    add_meta_box(
        'taddressbox_address_meta_box', // $id
        'taddressbox Address', // $title
        'show_taddressbox_address_meta_box', // $callback
        get_current_screen(), // $screen
        'normal', // $context
        'high' // $priority
    );
}

function taddressbox_address_save_postdata($post_id, $post, $update)
{
    //if this is post revision, then bail
   if (wp_is_post_revision( $post_id))
   {
       return;
   }

    // if our current user can't edit this post, bail  
    if ( !current_user_can( 'edit_post' ) ) return;  


  $lat_val = sanitize_text_field(get_post_meta($post_id, '_taddressbox_lng', true));
    //get_post_meta($post->ID, 'taddressbox_lat', true);
    $lng_val = sanitize_text_field(get_post_meta($post_id, '_taddressbox_lng', true));
    update_post_meta($post_id, '_taddressbox_lat', $lat_val);   
    update_post_meta($post_id, '_taddressbox_lng', $lng_val);


}



function show_taddressbox_address_meta_box() {
    global $post;  

//   $values = get_post_custom( $post->ID );
    $lat = isset( $values['taddressbox_lat'] ) ? trim(esc_attr( $values['taddressbox_lat'][0] )) : '30'; 
    $lng = isset( $values['taddressbox_lng'] ) ? trim(esc_attr( $values['taddressbox_lng'][0] )) : '69';

//$lat = '30';
//$lng ='69';
    //  $meta = get_post_meta( $post->ID, 'taddressbox_address', true );
        ?>

    <input type = "hidden" name = "taddressbox_address_box_nonce" value = "<?php echo wp_create_nonce( basename(__FILE__) ); ?>">

    <!-- All fields will go here -->

    <div id = "map" tabindex = "0" style = "position: relative;height:400px;margin:0; padding:0; display: block;"></div>
    <div id = "taddressbox_latlng">
     <label for"latitude">Latitude</label> <input type = "text" id = "taddressbox_lat" name = "taddressbox_lat" value = "<?php echo $lat; ?>">
      <label for"longitude">Longitude</label> <input type = "text" id = "taddressbox_lng" name  = "taddressbox_lng" value = "<?php echo $lng; ?>">
    </div>

<script>


<?php if ( trim($lat) == '' || trim($lng) =='' ) { ?> InitializetaddressboxMap();
<?php  } else {  ?>
InitializetaddressboxMap(<?php echo $lat; ?>,<?php echo $lng; ?>);    
<?php } ?>
</script>
    <?php  }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
456
1

Ответы 1

Вы должны использовать $_POST[] для перехвата и сохранения кода, отправленного из формы. Я исправил ваш код, не стесняйтесь использовать его.

add_action( 'add_meta_boxes', 'add_taddressbox_address_meta_box' );

    function add_taddressbox_address_meta_box() {
        add_meta_box(
            'taddressbox_address_meta_box', // $id
            'taddressbox Address', // $title
            'show_taddressbox_address_meta_box', // $callback
            get_current_screen(), // $screen
            'normal', // $context
            'high' // $priority
        );
    }


    add_action( 'save_post', 'taddressbox_address_save_postdata' );
    function taddressbox_address_save_postdata( $post_id )
    {
        //if this is post revision, then bail
       if (wp_is_post_revision( $post_id))
       {
           return;
       }

        // if our current user can't edit this post, bail  
        if ( !current_user_can( 'edit_post' ) ) return;  

        if ( ! isset( $_POST['my_lat_lang_box_nonce'] ) ) {
            return $post_id;
        }
        $nonce = $_POST['my_lat_lang_box_nonce'];

        // Verify that the nonce is valid.
        if ( ! wp_verify_nonce( $nonce, 'my_lat_lang_box' ) ) {
            return $post_id;
        }

        $lat_val = sanitize_text_field($_POST['taddressbox_lat']);
        $lng_val = sanitize_text_field($_POST['taddressbox_lng']);

        update_post_meta($post_id, '_taddressbox_lat', $lat_val);   
        update_post_meta($post_id, '_taddressbox_lng', $lng_val);


    }



    function show_taddressbox_address_meta_box( $post ) {

        $lat = get_post_meta( $post->ID, '_taddressbox_lat', true );
        $lng = get_post_meta( $post->ID, '_taddressbox_lng', true );


        wp_nonce_field( 'my_lat_lang_box', 'my_lat_lang_box_nonce' );

         ?>


        <!-- All fields will go here -->

        <div id = "map" tabindex = "0" style = "position: relative;height:400px;margin:0; padding:0; display: block;"></div>
        <div id = "taddressbox_latlng">
         <label for"latitude">Latitude</label> <input type = "text" id = "taddressbox_lat" name = "taddressbox_lat" value = "<?php echo $lat; ?>">
          <label for"longitude">Longitude</label> <input type = "text" id = "taddressbox_lng" name  = "taddressbox_lng" value = "<?php echo $lng; ?>">
        </div>

    <script>


    <?php if ( trim($lat) == '' || trim($lng) =='' ) { ?> InitializetaddressboxMap();
    <?php  } else {  ?>
    InitializetaddressboxMap(<?php echo $lat; ?>,<?php echo $lng; ?>);    
    <?php } ?>
    </script>
        <?php  }

Спасибо. Возможно, это была одна из проблем, но простое использование $_POST не решило проблему. Оказывается, sanitize_text_field() удаляла значения, и поэтому ничего не сохранялось — это было главным виновником. Когда я удалил поле sanitize_text_field, теперь я могу сохранять значения. Теперь мне нужно запустить его через пользовательскую санитарию, вероятно.

Morgan Janjua Crane 31.01.2019 22:44

Я протестировал код, который написал, и он отлично сохранял данные, предполагая, что возвращаемые значения — это просто числа, sanitize_text_field должен работать правильно. Дайте мне знать, какие данные вы ожидаете, и, возможно, я смогу помочь вам больше.

Biplav Subedi 03.02.2019 13:26

Текст должен содержать только числа с плавающей запятой (отрицательные или положительные). Казалось, что sanitize_text_field на самом деле возвращает пустое значение. Теперь это работает. Большое спасибо!

Morgan Janjua Crane 04.02.2019 16:11

Другие вопросы по теме