Что идет первым: перехват wp_head или the_content в Wordpress? - PullRequest
0 голосов
/ 09 мая 2018

Я изучаю плагины. Я просто хочу увеличить количество просмотров после открытия поста. Если я прокомментирую эти строки:

//    if(is_single()){
//        $views++;
//    }

Я не вижу увеличения. Когда они не комментируются, после открытия поста я вижу увеличение сразу.

add_filter('the_content', 'get_views_count');
function get_views_count($content){

    if(is_page()){
        return $content;
    }

    global $post;

    $views = $post->my_count;

//    if(is_single()){
//        $views++;
//    }

    return $content . '<p>Views: ' . $views . '</p>';
}


add_action('wp_head', 'increase_counts');
function increase_counts(){

    if(!is_single()){
        return;
    }

    global $wpdb, $post;

    $views = $post->my_count + 1;

    $query = "UPDATE $wpdb->posts SET my_count=$views WHERE ID=$post->ID";
    $wpdb->query($query);
}

Я думал, что хук wp_head должен идти первым, чем the_content. Мне проще такая логика: wp_head берет число отсчетов из db, увеличивает его и записывает в db. Тогда the_content просто выводит результат. Как узнать, какой хук идет первым? Как я мог изменить их приоритет в этом примере?

1 Ответ

0 голосов
/ 09 мая 2018

Рэйчел Васкес имеет одну из самых полных статей о хуках WordPress, упорядоченных по последовательности срабатывания, которую вы можете найти вокруг, поэтому, когда вам нужно узнать, какой хук срабатывает первым, вы должны полностью проверить это: Последовательность запуска хуков WordPress !

Теперь, чтобы ответить на ваш вопрос, сначала запускается wp_head. Проблема с вашим кодом лежит здесь:

global $wpdb, $post;

$views = $post->my_count + 1; // HERE!

Вы присваиваете $views текущее значение $post->my_count + 1 (например, 5 + 1 = 6), но $post->my_count все еще сохраняет свое старое значение (например, 5).

Если вы хотите отобразить обновленное количество просмотров, вам нужно сначала увеличить $post->my_count:

global $wpdb, $post;

$post->my_count = $post->my_count + 1; // Increment the views count in the $post object first
$views = $post->my_count; // Assign the newly updated views count to the $views variable

Таким образом, когда ваша get_views_count() функция вызывается, объект $post был обновлен с правильным количеством просмотров.

Кроме:

Кажется, вы изменили таблицу wp_posts, добавив в нее столбец my_count. Пожалуйста, не делай этого.

Старайтесь по возможности не менять основной материал (таблицы базы данных и / или основные файлы и папки WordPress), чтобы обеспечить максимальную совместимость любых плагинов или тем, которые вы разрабатываете с будущими выпусками WordPress. Вы захотите сохранить свои данные просмотров в таблице wp_postmeta с помощью функции update_post_meta () .

...