Плагин не работает, но только на GoDaddy Hosted site

Я создаю плагин для друга для регистрации условий поиска на своем сайте. Это очень просто. Он создает новую таблицу для хранения терминов, введенных в поле поиска. Он преобразует поисковый запрос в нижний регистр, проверяет базу данных на соответствующий термин и либо вставляет этот термин в базу данных, либо увеличивает количество подходящего термина. Он работал как ожидалось на моей учетной записи хостинга. Затем я установил его на WP-установке на учетной записи хостинга GoDaddy …

До тех пор, пока я вошел в систему, кажется, что работает, есть ли в базе данных подходящий термин. Когда я ищу сайт в качестве гостя, он добавит новый уникальный поисковый запрос в базу данных, но если существует существующий термин, он ничего не делает. Ну, это не совсем так. Я видел, как он увеличил счет несколько раз, но не на 1, на 2. Кажется, он работает очень спорадически на GoDaddy. Я не могу понять это. Фактический плагин можно найти здесь .

Я ценю любое время, потраченное на это.

благодаря

// Register function to be called when plugin is activated register_activation_hook( __FILE__, 'mac_search_log_activation' ); function mac_search_log_activation(){ global $wpdb; $prefix = $wpdb->prefix; $creation_query = 'CREATE TABLE ' . $prefix . 'mac_search_log ( `id` mediumint(8) NOT NULL AUTO_INCREMENT, `full_search_term` text NOT NULL, `count` mediumint(8) NOT NULL, PRIMARY KEY (`id`) );'; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $creation_query ); } // Register function to be called when administration pages init takes place add_action( 'admin_init', 'mac_search_log_admin_init' ); function mac_search_log_admin_init(){ add_action('admin_post_delete_mac_search_log_term', 'delete_mac_search_log_term'); } // Register function to be called when admin menu is constructed add_action( 'admin_menu', 'mac_search_log_settings_menu' ); // Add new menu item for Search Term History function mac_search_log_settings_menu() { add_menu_page( 'Search Term History', 'Search Term History', 'manage_options', 'search-term-history', 'mac_search_log_config_page', null, 4.7); } // Function to render plugin admin page function mac_search_log_config_page() { global $wpdb; ?> <!-- Top-level menu --> <div id="mac_search_log-general" class="wrap"> <h2>Searched Terms</h2> <form method="post" action="<?php echo admin_url( 'admin-post.php' ); ?>"> <input type="hidden" name="action" value="delete_mac_search_log_term" /> <?php wp_nonce_field( 'mac_search_log_term_deletion' ); ?> <?php $term_query = 'select * from '; $term_query .= $wpdb->prefix; $term_query .= 'mac_search_log ORDER by count DESC'; $term_items = $wpdb->get_results( $wpdb->prepare( $term_query ), ARRAY_A ); ?> <table class="wp-list-table widefat fixed" > <thead><tr> <th style="width: 50px">Delete</th><th style="width: 300px">Search Term</th><th>Count</th></tr></thead> <?php // Display search terms if query returned results if ( $term_items ) { foreach ( $term_items as $term_item ) { echo '<tr style="background: #FFF">'; echo '<td><input type="checkbox" name="terms[]" value="'; echo esc_attr( $term_item['id'] ) . '" /></td>'; echo '<td>' . $term_item['full_search_term'] . '</td>';; echo '<td>' . $term_item['count'] . '</td></tr>'; } } else { echo '<tr style="background: #FFF">'; echo '<td colspan=4>No Searches Yet</td></tr>'; } ?> </table><br /> <input type="submit" value="Delete Selected" class="button-primary"/> </form> </div> <?php } add_filter('pre_get_posts','MACSearchLog'); function MACSearchLog($query) { if ($query->is_search) { global $wpdb; $term = strtolower($query->query_vars['s']); $term_query = 'select * from '; $term_query .= $wpdb->prefix; $term_query .= 'mac_search_log'; $term_query .= ' WHERE full_search_term = "'.$term.'"'; $term_items = $wpdb->get_row( $wpdb->prepare( $term_query ), ARRAY_A ); if(empty($term_items)){ // insert term and set count to 1 $term_item = array( 'full_search_term' => $term, 'count' => 1 ); $wpdb->insert($wpdb->prefix.'mac_search_log', $term_item); }else{ // update existing row count++ $new_query = 'UPDATE '; $new_query .= $wpdb->prefix; $new_query .= 'mac_search_log'; $new_query .= ' SET count = count+1 '; $new_query .= 'WHERE id = '.$term_items['id']; $wpdb->query($wpdb->prepare($new_query)); } } } function delete_mac_search_log_term(){ $deleted_terms = array(); // Check that user has proper security level if ( !current_user_can( 'manage_options' ) ) wp_die( 'Not allowed' ); // Check if nonce field is present check_admin_referer( 'mac_search_log_term_deletion' ); // If search terms are present, cycle through array and call SQL // command to delete entries one by one if ( !empty( $_POST['terms'] ) ) { // Retrieve array of search term IDs to be deleted $terms_to_delete = $_POST['terms']; global $wpdb; foreach ( $terms_to_delete as $term_to_delete ) { $deleted_terms[] = get_search_term_by_id(intval($term_to_delete));// TO GET SEARCH TERMS FOR EMAIL $query = 'DELETE from ' . $wpdb->prefix; $query .= 'mac_search_log '; $query .= 'WHERE id = ' . intval( $term_to_delete ); $wpdb->query( $wpdb->prepare( $query ) ); } } // UNCOMMENT THE FOLLOWING 2 LINES TO DISPATCH EMAIL WITH DELETED SEARCH TERMS // $terms = print_r($deleted_terms, true); // wp_mail( get_option('admin_email'), 'Search Terms Deleted', $terms); // Reload the search term history page wp_redirect( add_query_arg( 'page', 'search-term-history', admin_url( 'admin.php' ) ) ); exit; } function get_search_term_by_id($id){ global $wpdb; $term_query = 'select * from '; $term_query .= $wpdb->prefix; $term_query .= 'mac_search_log '; $term_query .= 'WHERE `id` = '.$id; $term_item = $wpdb->get_row( $wpdb->prepare( $term_query ), OBJECT ); if($term_item){ return $term_item->full_search_term; }else{ return null; } } 

Изменить: я регистрировал запросы и все остальное. Ничего не видно. Я заменил SQL-запрос на $ wpdb-> update () и заменил if(empty($term_items)){ с if($term_items) при if($term_items) связанных действий, и это, похоже, очистило некоторые аномалии со счетом , но он просто не будет обновляться в учетной записи GoDaddy, если я не войду в систему. С одной стороны мне трудно поверить, что другая учетная запись хостинга повлияет на это, но я видел более странные вещи от GoDaddy в прошлом ,

Я смог воссоздать это, но в моей конфигурации это был CDN (кеш кеша) и / или кеш браузера, который обходил ваш запрос.

Для того чтобы кеш браузера был проблемой, поиск должен был произойти в результате щелчка ссылки. Например, если вы нажали ссылку на? S = термин, она сначала проверит кеш браузера. Если это произошло в результате формы GET, она должна обойти кеш браузера, но я могу ошибаться в этом.

Чтобы проверить это: проверьте файл .htaccess для правил кэширования. Go Daddy использует правила кэширования браузера для повышения производительности и совместимости с CDN.

Для проблемы с CDN / edge cache вы должны быть посетителем (без файлов cookie). Кэш-страницы CDNs вместе с метаинформацией (то есть, как изменяется страница), и это обычно пользовательский агент, язык и некоторые другие вещи.

Окончательные планы хостинга Go Daddy поставляются с функцией CDN (с которой я тестировал), но это также может произойти с облачным или другим CDN.

Чтобы проверить это: посетите свой сайт в другом браузере или измените файл хостов, чтобы использовать IP-адрес вашего хостинга, а не IP-адрес вашего CDN.

Для решения я лично рекомендую использовать ajax. Вы не можете помешать некоторому уровню кэшировать выводимый HTML-вывод страницы поиска, но вы можете вставить обратный вызов ajax для регистрации строки поиска.

Надеюсь, это поможет!