Хук WordPress publish _ {$ post_type} работает только для сообщений, а не для пользовательских типов сообщений или страниц. - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь отправить уведомление pu sh, когда публикуются какие-либо сообщения, пользовательские типы сообщений или страницы. Я получаю включенные типы сообщений в настройках плагина и добавляю действие через foreach l oop в методе моего класса __construct. Проблема в том, что он работает только для сообщений, а не для каких-либо настраиваемых типов сообщений или страниц. Вот моя функция и действие:

foreach ((array)get_option('PushPostTypes') as $postType) {
    add_action("publish_{$postType}",  array($this, 'doNewPostPush'), 10, 2);
}

public function doNewPostPush($id, $post) {
    $pushData = array(
        'title' => $post->post_title,
        'body' => strip_tags($post->post_content),
        'data' => array(
            'url' => trailingslashit(get_permalink($id)),
        ),
    );

    if (has_post_thumbnail($id)) {
        $pushData['image'] = get_the_post_thumbnail_url($id);
    }
    
    $this->sendNotification($pushData);
}

get_option('PushPostTypes') - это массив типов сообщений, которые выбирает пользователь, например: array('post', 'page', 'custom_post');

Любая идея, почему это работает только для post а не для страниц или произвольных типов сообщений?

1 Ответ

0 голосов
/ 12 июля 2020

Ваш код работал у меня, при условии, что ваш get_option('PushPostTypes') работает должным образом (очевидно, мне пришлось высмеивать это).

Попробуйте другой подход, который не полагается на get_option('PushPostTypes'), чтобы увидеть, получите ли вы тот же результат;

add_action('transition_post_status', function ($new_status, $old_status, $post) {
    if ($new_status !== 'publish') {
        return;
    }

    // do something
}, 10, 3);

Попробуйте ловушку 'transition_post_status', которая работает для всех сообщений без их специального определения. Положите это где-нибудь, чтобы посмотреть, работает ли он. Выполните любую отладочную инструкцию, которая вам подходит. Затем , если это работает, переместите его в код класса и посмотрите, работает ли это. Я отлаживаю, пытаясь определить, где в первую очередь что-то пошло не так. Делая это очень простым, чтобы заставить его работать, затем постепенно добавляю сложности, пока он не сломается.

...