За последние 24 часа нас посетили 9302 программиста и 667 роботов. Сейчас ищет 151 программист ...

Функция для изменения статуса поста wordpress

Тема в разделе "Wordpress", создана пользователем IGI66, 3 фев 2019.

  1. IGI66

    IGI66 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    6
    Симпатии:
    0
    Помогите с функционалом плиз) Для каждого кастомного поста можно добавить таймер (ACF), по истечению которого, статус поста должен меняться на draft. Я подключил плагин jQuery Countdown, куда передается дата с ACF, есть ивент который вызывает функцию, когда счетчик доходит до нуля. Осталось только написать функцию которая будет менять статус текущего поста. Помогите кто чем сможет))
     
  2. oolleegg55

    oolleegg55 Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    24
    Симпатии:
    3
    Что мешает использовать стандартную функцию wp_update_post для этих целей? Изменяете значение post_status на draft и дело сделано. Или есть подводные камни, которые я не вижу?
     
  3. IGI66

    IGI66 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    6
    Симпатии:
    0
    Спасибо, почти получилось. Теперь у меня есть функция в function.php и мне нужно ее вызвать в плагине. Пишут что только через Ajax, но что то не получается...

    Вот php

    PHP:
    1. function postStatus() {
    2.     $postID = get_the_ID();
    3.     $my_post = array(
    4.         'ID'           => 58,
    5.         'post_status' => 'publish'
    6.     );
    7.     wp_update_post( $my_post );
    8. }
    Вот js

    Код (Javascript):
    1. var liftoffTime = new Date();
    2.         liftoffTime = new Date('<?=get_sub_field('offer_time_left'); ?>');
    3.     $('.offer-time-left').countdown({
    4.         until: liftoffTime,
    5.         expiryText: '<div class="over">Offer is over</div>',
    6.         onExpiry: liftOff,
    7.         format: 'd h m',
    8.         labels: ['y', 'm', 'w', 'd', 'hrs', 'mins', 's'],
    9.         labels1    : ['y', 'm', 'w', 'd', 'hr', 'min', 's']
    10.     });
    11.  
    12.    
    13. function liftOff() {
    14.         $.ajax({
    15.             url:"function.php",
    16.             data:"id=2",
    17.             success: function(){
    18.                 postStatus();
    19.         }
    20.         })
    21.  
    22.     }
     
    #3 IGI66, 3 фев 2019
    Последнее редактирование: 3 фев 2019
  4. oolleegg55

    oolleegg55 Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    24
    Симпатии:
    3
    1. Вам нельзя обновлять статус поста из ajax. Так как это будет выполняться из под неавторизованного пользователя и любой пользователь может манипулировать этим.

    2. Ваш JS код - это какой-то ад, который непонятно как должен работать. Мне кажется, или вы действительно вызываете функцию PHP из JS кода?
     
  5. IGI66

    IGI66 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    6
    Симпатии:
    0
    2. в JS вызывается плагин "счетчик" с опциями. И да, мне нужно вызвать ее из js. Что бы по истечению таймера менялся статус поста
     
  6. oolleegg55

    oolleegg55 Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    24
    Симпатии:
    3
    Вам следует разобраться как работает клиент-сервер и вообще Web. Где и что запускается и как взаимодействует. И тогда многие вопросы отпадут сами собой.
     
  7. IGI66

    IGI66 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    6
    Симпатии:
    0
    я не спорю, но сейчас стоит именно такая задача. Скажи пожалуйста реально вообще сделать так как я собираюсь?
     
  8. oolleegg55

    oolleegg55 Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    24
    Симпатии:
    3
    Реально, с помощью еще одного AJAX, но, на мой взгляд, такой подход вообще не оправдан. Да и вообще изменять что-то на сервере по команде браузера невторизованного пользователя - это ну очень плохо.
    У вас есть значение на сервере: get_sub_field('offer_time_left'). Ну так и делайте с ним что вам нужно на сервере. Если время вышло, ставьте посту статус драфт или что-то еще. Зачем это делать из JS браузера? Чтобы проверить, что время вышло используйте wp_cron или меняйте статус непосредственно перед запросом. Да путей много, как сделать, у вас же непонятно что: PHP прямо из JS (что просто невозможно), и прочие страсти.
     
  9. IGI66

    IGI66 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    6
    Симпатии:
    0
    get_sub_field же записывает просто дату,которая не меняется, сам счетчик же плагином отсчитывается. Или я что то не так понял...? Или сравнивать дату филда с текущей и если они совпадают менять статус?
     
    #9 IGI66, 3 фев 2019
    Последнее редактирование: 3 фев 2019
  10. oolleegg55

    oolleegg55 Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    24
    Симпатии:
    3
    Мне кажется, что именно так и нужно делать.
     
  11. IGI66

    IGI66 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    6
    Симпатии:
    0
    Спасибо за идею! )