• Возможно ли для произвольного типа записи сделать отдельную таблицу?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Игорь Воротнёв, спасибо за подробный ответ! Именно поэтому я на старте стараюсь задавать вопросы, которые у опытных специалистов могут вызвать, как минимум, недоумение :). Что бы как вы правильно сказали - в дальнейшем не выстрелить себе в ногу!
  • Возможно ли для произвольного типа записи сделать отдельную таблицу?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Просто интересуюсь, так как к изучению WP приступил не так давно. Это в большей степени теоретический вопрос, а не практический.
  • Возможно ли для произвольного типа записи сделать отдельную таблицу?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Денис Янчевский, нашел альтернативу. Написал функцию, которая удаляет записи по post_type
    add_action( 'wp', 'remove_post_type_events' );
        function remove_post_type_events()
        {
            $params = [
                'posts_per_page' => -1,
                'post_type' => 'events',
                'post_status' => [
                    'publish',
                    'future',
                    'draft',
                    'pending',
                    'private',
                    'trash',
                    'auto-draft',
                    'inherit',
                ]
            ];
            $query = new WP_Query($params);
            if ($query->have_posts()) :
                while ($query->have_posts()) : $query->the_post();
                    wp_delete_post($query->post->ID, true);
                endwhile;
            endif;
            wp_reset_postdata();
        }


    Не могу сообразить, как такой же прием провернуть с таксономиями? Название таксономий: calendars, cities. Не подскажите?
  • Вывести данные по БД у произвольного типа данных?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Видоизменил текущий запрос к базе на
    function get_events()
                {
                    global $wpdb;
                    $events = $wpdb->get_results(
                        "
                    SELECT post_id, meta_value
                    FROM $wpdb->postmeta
                    WHERE meta_key = 'data-provedeniya'
                   "
                    );
                    return $events;
                }


    И смог получить все необходимые данные. По бд вопрос закрыт! Денис Янчевский примного вам благодарен!
  • Вывести данные по БД у произвольного типа данных?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    ответил в другом Вашем вопросе.

    Видел, спасибо :) Просто решил вопрос касательно REST отдельно задать, а то тут уже беседу снесло к БД :)

    А зачем делать это вручную? В функцию wp_json_encode можно передать и массив и объект напрямую из PHP.

    Я рассуждал так: получаю из БД массив, такого вида:
    5d32fb0a6b09f908572460.png

    Мне требуется привести, данные к виду:
    [
    { "date": "......", "title": "......", "description": "......", "url": "......" },
    ];

    Именно под эти цели я и написал функцию get_json. Сейчас попробовал сделать, как вы посоветовали, то есть не использовать свою функцию get_json:
    $events = get_events();  //получаем массив
    $calJson = json_encode($events, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); // кодируемым в json и помещаем в перемененную

    После чего $calj_son передаем в js. И те данные, которые мы передаем - скрипт не понимает(из-за экранирования).

    При кодирование массива в json использовал битовые маски. И если и с переводом символов формата \u0436 в кириллицу проблем не возникло, то вот не смог избавиться от экранирования, хотя флаг JSON_UNESCAPED_SLASHES я использовал, не знаю почему он не сработал.

    Вот в каком виде данные попадают в скрипт:
    5d3308add4db9146213249.png

    Не подскажите, есть путь решения или только, как я изначально делал?

    get_permalink( ID_записи )

    Отдельное спасибо :) как-то сходу не догадался написать
    Вместо: $item->guid
    Вот так: get_permalink( $item->id)

    Не понял где у Вас вызов WP_Query. На сколько я вижу, get_events использует wpdb.

    Честно говоря, я сам не понял, как я смог вызвать такую ошибку. Сейчас не смог её повторно вызвать :)

    Ещё таков вопросик, не доскажите, можно ли как-то объединить SQL запрос (SQL я совсем недавно стал изучать, в этих вопросах сильно плаваю пока). Что бы помимо полей, которые мы берем из таблицы post(id, post_date ,post_title, guid), ещё взять данные из таблицы postmeta (post_id,meta_key, meta_value)?

    Это как раз и есть поля созданные ACF (о чем выше писал), именно к такому полю (Дата проведения), нужно привязать дату в календаре.
  • Как добавить поля созданные в ACF в REST (маршруты)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Тоже находил такой плагин, только решил спросить по одной причине, перейти по маршруту одной из записи
    https://alexanderyurchenko.ru/wp-json/wp/v2/events...

    Видно, что там присутствует пустой массив
    "meta"=[];
    А так как значения создаваемых плагином полей (meta_key,meta_value и т.д.) хранятся в таблице postmeta я предположил, что возможно при регистрации или произвольного типа данных или возможно про создание этих полей я что-то не указал, что бы они попадали в маршрут.

    В кодексе WP написано, что в маршруты можно добавлять к типам записи, просто я не до конца понял как это сделать.
  • Вывести данные по БД у произвольного типа данных?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Денис Янчевский, можно ещё попросить у вас совета :), по поводу моей привязки, просто интересно.

    Сам запрос к БД я оформил в таком виде:
    function get_events()
            {
                global $wpdb;
                $events = $wpdb->get_results(
                    "
                    SELECT id, post_date ,post_title
                    FROM $wpdb->posts
                    WHERE post_status = 'publish'
                    AND post_type = 'events'
                   "
                );
                return $events;
            }


    После чего я в другой функции собираю строчку, которую в дальнейшем передам в календарь:
    function get_json($arr)
            {
                $data = '[';
                foreach ($arr as $item) {
    $data .= '{ "date": "' . $item->post_date . '", "title": "' . $item->post_title . '", "description": "", "url": "' . $item->guid . '" },';
                }
                $data .= '];';
                return $data;
            }

    Тут первый вопрос: url я формирую "url": "' . $item->guid . '", соответственно ссылка у меня получается не ЧПУ, есть возможность её преобразовать ЧПУ?

    Далее я провожу такие операции:
    $events = get_events(); // получаю собственно ассоциативный массив
    $events = get_json($events); // подгоняю его функцией get_json к понятному для календаря виду
    $events = wp_json_encode($events,JSON_BIGINT_AS_STRING); // кодирую в Json
    $result = json_decode($events) // декодирую из Json и в дальнейшем эту переменную помещаю в скрипт.
    $(document).ready(function () {
            let data = <?=  $result; ?>
            $('#eventCalendar').eventCalendar({
                jsonData: data,
    
               ......


    Второй вопрос последние два вызова функции (кодирование\декодирование), изначально я не делал и при попытке передать php переменную в js, появлялась ошибка:
    Catchable fatal error: Object of class WP_Query could not be converted to string in...


    Погуглив я понял, что ошибка появляется из-за того, что JS не может объект конвертировать в строку, именно поэтому мне пришлось сделать ещё два вызова функций. Возможно ли это как-то оптимизировать (решений я не нашел).

    P.S. эти вопросы я в большей степени хочу уяснить для себя, так как изучение WP начал не так давно, не хотелось бы на непонятные мне вещи забивать и идти дальше.
  • Вывести данные по БД у произвольного типа данных?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Денис Янчевский, спасибо большое!
    Пока ждал ответа реализовал с помощью БД, но в конечном итоге адаптирую REST.

    И когда у меня получилось привязать события к календарю, я обнаружил очень серьезный косяк, который ранее мне в глаза не бросался, он кстати и в REST присутствует. Поэтому в любом случае ещё раз обращаюсь к вам за помощью :)

    Все события на странице https://alexanderyurchenko.ru/events/ созданы 17.07.2019, то есть фактически я их создал в WordPress.

    Но если зайти в любое из событие, например: https://alexanderyurchenko.ru/events/14-j-polumara...

    То там есть два поля:
    * Дата: 07.04.2019
    * Город: Стамбул

    Эти поля созданы с помощью ACF, поля с датой имеет идентификатор 'data-provedeniya'
    5d3203bbc5f76558190381.png

    Получается следующее, если реализовать привязку событий в календаре по дате ,которая берется из:
    * В случае с БД - post_date
    * В случае с REST - "date"

    То даты, так как созданы в один день, попадут в один день календаря (прощу прощения за каламбур).

    Собственно последний вопрос: как вытащить дату, которую я ставлю в произвольном поле созданном плагином ACF и брать её за дату создания события.
    5d32068e1e30a554381324.png
  • Вывести данные по БД у произвольного типа данных?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Денис Янчевский, верите нет, битый час сижу курю кодекс WP + kama. Смог подключить маршруты для типа записи и таксономий
    • маршрут для записи События
    • маршрут для таксономии Города
    • маршрут для таксономии Календари

    Но видимо уже настолько запарился, что тупо не понимаю, как выдрать из json нужные поля (мне нужно дата, имя, статус). Немного конкретизирую задачу, на странице https://alexanderyurchenko.ru/events/

    Есть календарь, а ниже идет этот самый кастомный тип записи. Мне нужно "подружить" календарь с этими записями. Календарь принимает данные в формате json в таком виде:
    { "date": "2019-07-15 10:15:20", "title": "Событие 1", "description": "Анонс меоприятия", "url": "https://alexanderyurchenko.ru/events/" }


    А про БД начал спрашивать уже от отчаяния :) так как про REST узнал я сегодня, попытался изначально на нем реализовать - не вышло. Решил зайти с другой стороны.

    Можете подсказать, как например из https://alexanderyurchenko.ru/wp-json/wp/v2/events/ "выдрать" нужные поля?

    P.S. Поле "status": "publish", нужно для составления проверки, так как в БД я точно помню, что записи можно выгружать по статусу "publish", а насчет REST информации я не нашел, можно ли выгружать записи с определенным статусом (опубликованные, а остальные исключить).
  • Вывести данные по БД у произвольного типа данных?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    На экран выводит, ну нужно несколько иная манипуляция. А именно вытащить определенные поля: post_status, post_title, post_date.

    Не оптимально ли выбрать их из БД? Или можно отсюда выбрать? Мне эти данные нужны для последующей конвертации в json (json_encode)
  • Как «подружить» Wordpress и календарь событий jQuery?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Да, вчера как раз раздел на wpkame нашел c ссылками на кодекс, просто последний раз кодил на WP, когда ещё 4 версия была :) Потом как-то не было задач.
  • Git постоянно вылезает "stdin: is not a tty" (Windows 10), что это?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Понял, вопросов больше нет :)
    Спасибо!