Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
TFK70 opened this issue Jul 6, 2022 · 11 comments · Fixed by #17
Closed

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

TFK70 opened this issue Jul 6, 2022 · 11 comments · Fixed by #17
Labels
enhancement New feature or request

Comments

@TFK70
Copy link
Contributor

TFK70 commented Jul 6, 2022

Задача

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

Как я это вижу

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

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

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

image

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

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

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

const normalizeString = (string) =>
  string
    .replace(/(<p>|<\/p>)/g, '')
    .replace(/&#8211;/g, '-')
    .replace(/&#8212;/g, '-')
    .replace(/<meta charset="utf-8">/g, '')
    .replace(/<br\/>/g, '')
    .replace(/<br \/>/g, '')
@TFK70
Copy link
Contributor Author

TFK70 commented Jul 7, 2022

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

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

image

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

image

@TFK70
Copy link
Contributor Author

TFK70 commented Jul 7, 2022

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

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

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

@BRUSSELMINEFIVENINE BRUSSELMINEFIVENINE linked a pull request Jul 7, 2022 that will close this issue
@TFK70
Copy link
Contributor Author

TFK70 commented Jul 7, 2022

@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
Copy link
Contributor Author

TFK70 commented Jul 12, 2022

@brusselboy через ACF

@TFK70
Copy link
Contributor Author

TFK70 commented Sep 28, 2022

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

@TFK70
Copy link
Contributor Author

TFK70 commented Oct 4, 2022

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

@TFK70
Copy link
Contributor Author

TFK70 commented Oct 18, 2022

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

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

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

@TFK70
Copy link
Contributor Author

TFK70 commented Oct 18, 2022

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

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

image

@TFK70
Copy link
Contributor Author

TFK70 commented Oct 18, 2022

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

@TFK70
Copy link
Contributor Author

TFK70 commented Oct 18, 2022

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

попробуй

          price {
              ${await getRadii()}
          }

@TFK70
Copy link
Contributor Author

TFK70 commented Oct 20, 2022

@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
  }
}

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants