torin-asakura / shdvor

Репа шиномонтажки
https://shdvor.pro
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

Работа с данными #15

Closed TFK70 closed 1 year ago

TFK70 commented 2 years ago

Задача

Наполнить сайт данными с вордпресса

Как я это вижу

Все запросы нужно адресовывать на https://wp.shdvor.pro/graphql

Данные с вордпресса можно получать по Graphql

Также есть плейграунд, в который можно перейти нажав сюда

image

По похожей схеме работают https://misik.pro и https://dream-team.tech

Подводные камни

Некоторые записи могут иметь "мусорные" символы. Чтобы избавиться от них строку можно прогнать через подобную функцию

```typescript const normalizeString = (string) => string .replace(/(

|<\/p>)/g, '') .replace(/–/g, '-') .replace(/—/g, '-') .replace(//g, '') .replace(//g, '') .replace(/
/g, '') ```

TFK70 commented 2 years ago

@brusselboy да, они уже существуют и их уже можно получить по gql

Не знаю заметил ты или нет, но в плейграунде есть кнопка Query Composer:

image

Слева будет меню, которое поможет получить что надо:

image

TFK70 commented 2 years ago

@brusselboy для начала нужно загрузить нужное изображение в медиафайлы - https://wp.shdvor.pro/wp-admin/upload.php

Потом зайти на страницу поста и загрузить изображение в featured image

Если блок featured image не отображается - погугли как его включить

TFK70 commented 2 years ago

@brusselboy

Какой запрос отвечает за просмотры у поста? Из счётчиков нашёл там только счётчик комментариев.

Никакой, оставь пока

Как отформатировать мейн текст, чтобы он был как здесь. Из идей только вырезать текст по кускам и уже их обрабатывать, мейби есть какой-то способ получше?

На вордпрессе его форматировать не надо, просто пометь его как-нибудь и парси на клиенте, добавляя форматирование

По поводу картинок не до конца разобрался, загрузить загрузил, но featured image не нашёл. Нагуглил вот это, пишут про "настройки экрана", у меня там нету featured image, на странице поста тоже ни намёка. По этому вопросу хотелось бы в дисе созвониться.

Создал отдельную группу - https://wp.shdvor.pro/wp-admin/edit.php?post_type=fragments

Перенеси все посты в нее, там есть имейдж

Со всем остальным текстом допустим с заголовком и со всем таким похожим текстом (у кнопок и т.д) мы как работаем, тоже всё с бека запрашиваем?

Можешь создать под это отдельный custom post type через CPT UI (то же самое я сделал для фрагментов, на которые дал тебе ссылку) и держать все подобные отрывки в нем

Только не забудь в конце при создании переключить свитч Show in graphql, иначе ты по графу его не получишь

TFK70 commented 2 years ago

@brusselboy через ACF

TFK70 commented 2 years ago

@brusselboy какой статус?

TFK70 commented 2 years ago

@brusselboy локально же у тебя всё норм?

TFK70 commented 2 years ago

@carminio запрашивай схему, поиграйся с этими запросами:

query A {
  __schema {
    queryType {
      fields {
        name
        type {
          fields {
            name
          }
        }
        args {
          name
          description
          defaultValue
        }
      }
    }
  }
}

Отсюда будешь получать радиусы

TFK70 commented 2 years ago

@carminio тебе нужен Service_Servicesparams_Price, ты же получаешь gql типы в ответе, у тебя вся схема есть

Мог бы достать название типа из инспектора справа или просто в поиске вбить r12

image

TFK70 commented 2 years ago

@carminio да, а как ты хотел? Еще раз: ты получаешь только схему по которой делаются запросы

TFK70 commented 2 years ago

@carminio погоди, так ты и передаешь промис, потренируй асинхронщину:

попробуй

          price {
              ${await getRadii()}
          }
TFK70 commented 2 years ago

@carminio

но на втором этапе где нужно вставлять код в какой-то файл single.php идея провалилась, тк такого файла в нашей теме нет.

Тема в вп - это клиент. У нас вместо темы свой клиент, поэтому никакие скрипты в тему вставлять не нужно тк бессмысленно. Но, тем не менее, вставить скрипт который будет инкрементить счётчик просмотров все-равно нужно

Необходима помощь разобраться как сделать счетчик без плагина (код который добавлял в graphql это решение без плагина), либо с плагином, разницы нет, результат все равно один и тот же

Плагин тебе энивей нужен, просто ты его юзаешь по-другому. Тот код который ты вставлял просто добавляет счетчик в gql схему и ты можешь его получить по gql, осталось счётчик инкрементить

Теперь к решению

Хз че за код этот чувак предложил чтобы view_count получать, но он не работает, переписал на это:

  register_graphql_field( 'Post', 'viewCount', [ 
    'type' => 'Int',
    'description' => __( 'The number of times the post was viewed', 'your-textdomain' ),
    'resolve' => function( $post, $args, $context, $info ) {
      // $post is an instance of a WPGraphQL Post model, 
      // so we can get the ID from the post, and then get meta from that post
      // by calling get_post_meta()
      $view_count = pvc_post_views( $post->postId );

      // if there's any count value, return it, otherwise return 0
      return isset( $view_count ) ? absint( $view_count ) : 0;
    }
  ]);

Ещё добавил отдельно gql мутацию на инкремент счётчика, её тебе нужно вызывать каждый раз когда кто-то тыкает на пост:

    register_graphql_mutation('incrementCounter', [ 
    'inputFields' => [
        'post_id' => [
            'type' => 'Int',
            'description' => _('Post id')
        ]
    ],
    'outputFields' => [
        'viewCount' => [
            'type' => 'Int',
            'description' => _('View count')
        ],
        'success' => [
            'type' => 'Boolean',
            'description' => _('Wrote to db succesfully')
        ]
    ],
    'description' => __( 'Increment post views counter' ),
    'mutateAndGetPayload' => function( $input, $context, $info ) {
      $pid = $input['post_id'];
      $view_count = pvc_post_views( $pid );
      $success = pvc_update_post_views($pid, $view_count + 1);
      return [
          "viewCount" => $view_count + 1,
          "success" => $success
      ];
    }
  ]);
mutation D {
  incrementCounter(input: {post_id: 1397}) {
    viewCount
    success
  }
}

И плагин не трогай, я там тоже кое-что поправил, если его переустановить - всё слетит