Используйте цикл, чтобы проверить, существует ли запись БД в WordPress? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть несколько неортодоксальный (я предполагаю) вопрос. У меня есть функция, которая добавляет запись в мою базу данных MYSQL с указанием местоположения lat и lng. Однако иногда эта функция работает неправильно, в результате чего запись в БД не создается. Поэтому я хотел бы создать цикл для проверки того, создала ли функция запись в БД, и если нет, выполнить функцию снова. Просто быть чистым; функция, которую я использую, является функцией GEOMyWP по умолчанию ( ссылка ). Иногда это не работает должным образом, я думаю, из-за времени отклика API карт Google.

У меня в файле functions.php есть следующее, и, похоже, оно работает. Я действительно хотел бы знать, если это правильный способ для достижения вышеизложенного, так как я не уверен Спасибо

global $wpdb;
$myccount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM ".$wpdb->prefix."gmw_locations WHERE object_id = %d", $post_id));
    if ($myccount <= 0) :
      while ($myccount <= 0) :
         gmw_pt_update_location( $args ); //The function I would like to check.
         $myccount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM ".$wpdb->prefix."gmw_locations WHERE object_id = %d", $post_id));
      endwhile;
    endif;

Ниже приведена функция, которую я использую для импорта адреса при создании сообщения для CPT

function gmw_update_post_type_post_location(  $post_id ) {

    // Return if it's a post revision
    if ( false !== wp_is_post_revision( $post_id ) )
        return;

    // check autosave //
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    //check if user can edit post
    if ( !current_user_can( 'edit_post', $post_id ) )
        return;
    //Add post Meta
    add_post_meta($post_id, 'address', $_POST['address'], false);

    //get the address from the custom field "address"
    $addressarray = get_post_meta( $post_id, 'address', true );
    $address = $addressarray[0];
    //$address = $_POST['address'];

    //varify that address exists. Otherwise abort the function.
    if ( empty( $address ) )
        return;

    //include the update location file file
    include_once( GMW_PT_PATH .'/includes/gmw-pt-update-location.php' );

    //make sure the file included and the function exists
    if ( !function_exists( 'gmw_pt_update_location' ) )
        return;

    //Create the array that will pass to the function
    $args = array(
            'post_id' => $post_id, //Post Id of the post 
            'address' => $address // the address we pull from the custom field above
    );
    //Start counting 1
    global $wpdb;
    $myccount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM ".$wpdb->prefix."gmw_locations WHERE object_id = %d", $post_id));
    if ($myccount <= 0) :
    while ($myccount <= 0) :
    //Add location
    gmw_pt_update_location( $args );

    //Start counting 2
    $myccount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM ".$wpdb->prefix."gmw_locations WHERE object_id = %d", $post_id));
    endwhile;
    endif;
}
//execute the function whenever post type is being updated
add_action( 'save_post_mpp-gallery', 'gmw_update_post_type_post_location', 13, 1 );

Функция, которая вставляет запись в базу данных, в конечном итоге: gmw_update_location Эту функцию можно найти в плагине GEOMyWP. Смотрите эту ссылку для справки: https://github.com/Fitoussi/geo-my-wp/blob/master/includes/gmw-location-functions.php#LC194

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...