Задать вопрос
@Preci

Как запустить функцию если опубликован пост или стоит «галочка»?

Добрый день!

Я написал себе свой кросспостинг записей в вконтакте (да-да, я знаю что есть плагины для этого, но я люблю "своё" :) )
// кросспостинг вконтакте
add_action('transition_post_status', 'send_to_cross_post', '100', '3');

function send_to_cross_post($new_status, $old_status, $post){
	if (($new_status == 'publish' && $old_status != 'publish')) {
		cross_post($post); // отправляем в функцию кросспостинга
	}
 }


Т.е. если запись получила статус "Опубликовано" и предыдущий статус не равен "Опубликовано" пост отправляется в группу вконтакте.

Все работает замечательно, но есть 1но но:

Иногда записи обновляются и хочется их так же отправить в группу вконтакте. Для этого мне приходится переводить запись в черновик, а потом снова её публиковать. Это не удобно.

Как бы мне добавить в админку перед кнопкой "опубликовать" галочку, при активации которой пост принудительно опубликуется в вконтакте, даже если предыдущий и новый статус равны?
  • Вопрос задан
  • 177 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
1. А если убрать $old_status != 'publish'?
2. Добавлять прям "перед кнопкой опубликовать" не очень просто, зачем хакать. Используйте add_metabox.
3. А почему бы не повесить вызов вашей функции на save_post вместо transition_post_status? И в нем дополнительно проверять не делается ли autosave и подходящий ли статус ('pusblish', чтобы драфты не улетали).

UPD: Уточнение и решение в комментах к ответу.
Ответ написан
@Preci Автор вопроса
Решил проблему.

Добавил галочку:

<?php 
add_action('post_submitbox_misc_actions','post_check_box');
function post_check_box() { ?>
<div class="misc-pub-section">
<p><input type="checkbox" name="post_to_vk" /> Опубликовать на стене ВКонтакте </p>
</div>
<?php } ?>


И изменил условие на:

if (($new_status == 'publish' && $old_status != 'publish') || ( isset( $_POST['post_to_vk'] ) && $_POST['post_to_vk'] && $new_status == 'publish' )) {
		cross_post($post);
	}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы