Он хранится в настраиваемом поле postmeta с именем «попадание» на значение, и это значение обновляется в реальном времени. p>
Я только что заметил, что когда я как администратор редактирую сообщение, значение «обращений» не увеличивается во время редактирования сообщения.
Когда я думаю об этом, это кажется логичным, потому что при «попадании» значение равно 15, когда я вхожу. в пост-издании, когда я закончу пост-редакцию, он все равно будет 15, потому что все пост-мета обновляются, когда я обновляю пост. ТАК, даже если мое сообщение посетит еще 10 человек, мой счетчик сообщений по-прежнему будет отображать значение 15, хотя должно показывать 25.
Итак, теперь я очень стараюсь с моим низким навыком PHP запретить обновление этого поля, пока я обновляю свои сообщения.
Я пробовал другой метод, но ни один из них не помог:
- Я пытался предотвратить обновление этой метадаты перед сохранением сообщения с помощью следующего кода :
Код: Выделить всё
function exclude_hits_from_update($null, $object_id, $meta_key, $meta_value) {
if ('hits' === $meta_key) {
return true;
}
return $null;
}
add_filter('pre_update_post_meta', 'exclude_hits_from_update', 10, 4);
- Я также попробовал этот код, чтобы попытаться получить значение метадаты непосредственно перед обновлением сообщения, но он тоже не сработал. (похоже, что это просто создает дополнительное поле с именем «обращения»):
Код: Выделить всё
function prevent_hits_field_update( $post_id, $post, $update ) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
if ( isset($_POST['hits']) ) {
$current_hits = get_post_meta($post_id, 'hits', true);
update_post_meta($post_id, 'hits', $current_hits);
}
}
add_action('save_post', 'prevent_hits_field_update', 10, 3);
- Я также пытался напрямую изменить функцию save_post в самом плагине (комментируя строку "update_post_meta", но я знаю, что это не так) достаточно :
Код: Выделить всё
public function adminSave( $post_id )
{
// skip for autosave
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
{
return;
}
// update hits count
if( isset($_POST['post_type']) && in_array( $_POST['post_type'], array( 'post', 'page' ) ) )
{
$hits = ( isset($_POST['hits']) && !empty($_POST['hits']) ? intval( preg_replace( '/[^0-9]/', '', $_POST['hits'] ) ) : 0 );
if( $hits > 0 )
{
$hits_exists = get_post_meta( $post_id, 'hits', true );
if( $hits_exists===false )
{
add_post_meta( $post_id, 'hits', $hits, true );
}
else
{
/*update_post_meta( $post_id, 'hits', $hits );*/ /* HERE */
}
}
}
// clear Popular Posts Widget
$ahc_ppw = new AJAX_Hits_Counter_Popular_Posts_Widget();
$ahc_ppw->clearCache();
return true;
}
Заранее спасибо за любую помощь!
Джонатан< /п>
Подробнее здесь: https://stackoverflow.com/questions/791 ... t-wordpres