sputnickk
@sputnickk

Как правильно использовать функцию php?

Всем привет! У меня есть вот такой вызов функции:

$repeater = get_post_meta( $post_id, 'faqshema', true);
		$cnt = count($repeater);

		echo '

		<script type="application/ld+json">
		{
		"@context": "https://schema.org",
		"@type": "FAQPage",
		"mainEntity": [

		';

		foreach($repeater as $one){

					echo '

					{
						"@type": "Question",
						"name": "';

						echo $one['question'];

					echo '",
						"acceptedAnswer": {
							"@type": "Answer",
							"text": "';

						echo $one['answer'];

					echo '"
								}
								}';
					if($cnt > 1) {echo ',' ;}
					$cnt --;

		}//foreach
		
		echo '

		]
		}
		</script>

		';


Код берет данные вопрос/ответ с произвольного поля текущей записи и выводит в футер... Все работает, все ок.
Сейчас этот код работает для двух типов записи, и надо еще чтобы работал для двух дополнительно.... Получается что этот код дублируется 4 раза.... Что не очень хорошо... что то смениться и потом в 4 местах менять.... Хочу завернуть этот код в функцию и в нужном месте для нужного типа записи просто дергать функцию, например так:

//выводим микроразметку faq для событий
get_repeater(get_the_ID());



//в другом файле у меня лежит сама функция:
 get_repeater(){

//В php не силен и вот тут я не знаю как собрать всю ту разметку в одну строку и вернуть через return($stringFaq);

 }
  • Вопрос задан
  • 2595 просмотров
Пригласить эксперта
Ответы на вопрос 3
rakot
@rakot
Сразу извинюсь за душнила mode on. Иногда я забываю за что хейтят PHP, когда я вижу подобный код, то спускаюсь на землю.
1. Не надо делать echo в функции, если делаете echo, то и называйте функцию echoMeta, но все равно, каноничнее возвращать результат.
2. get_the_ID - ужасное название. Что за the? Это какой-то божественный id? Почему id большими буквами? Я понимаю когда идет спор getJson или getJSON, но в случае с get_json уже споров нет.
3. Зачем вы пытаетесь изобрести вывод JSON? У вас любая ковычка в данных положит страницу. Сформируйте объект и штатными средствами сгенерируйте json.
4. Разделите логику и шаблон, на эти куски echo больно смотреть, хотя в WP это канон.
Ответ написан
Комментировать
@Sergey42osn
Где вывод пишешь do_action().
В function добавляешь add_action
По канонам wp.
Ответ написан
Комментировать
condor-bird
@condor-bird
Завертываем код в функцию
function generateFaqSchema($postId) {
    $repeater = get_post_meta($postId, 'faqshema', true);
    $count = count($repeater);

    $jsonLd = [
        "@context" => "https://schema.org",
        "@type" => "FAQPage",
        "mainEntity" => []
    ];

    foreach ($repeater as $item) {
        $question = $item['question'];
        $answer = $item['answer'];

        $jsonLd['mainEntity'][] = [
            "@type" => "Question",
            "name" => $question,
            "acceptedAnswer" => [
                "@type" => "Answer",
                "text" => $answer
            ]
        ];

        $count--;
        if ($count > 0) {
            $jsonLd['mainEntity'][] = ',';
        }
    }

   return  '
    <script type="application/ld+json">
    ' . json_encode($jsonLd) . '
    </script>
    ';
}


Там где нужно, вызываем функцию и передаем любые параметры:

echo generateFaqSchema(get_the_ID());
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы