WP, много переменных - выбрать правильное решение

1 234
J
На сайте с 21.08.2011
Offline
78
#21
SeVlad:
Кстати, парни, свете топика думаю будет полезен и этот пост Тимура.

Полезная штуковина! Добавил её в закладки, чтобы не потерять. ;)

И, мне кажется, я вижу решение моей проблемы. Решение простое и легко реализуемое.

Итак, мне надо было 3-4 штуки CPF из одних CPT использовать на страницах с выводом инфы с других CPT. Дублировать и ручками корректировать везде и вся - плохо. Иметь только в одних CPT, но выводить с другими - нехилая нагрузка БД и опять плохо. :)

Решение:

Эти 3-4 нужных CPF будут в CPT "двигатель авто", и будут редактироваться там же. Но, воспользовавшись встроенной возможностью WP перформить что-то каждый раз, когда происходит сохранение "поста, эти же CPF мы будем дублировать (да-да, именно дублировать) во все нужные CPT "модели авто"!

Заполнил/изменил значения в CPT "модель двигателя", нажал кнопку "Сохранить", и запустилась функция, лупящая по БД, которая ищет в каждом CPT "модель авто" meta_key с именем "установленная модель двигателя" и если его meta_value совпадает с title только что сохраненного CPT "модель двигателя", создаёт дубликаты этих нужных 3-4-х CPF и/или меняет их значения, если они отсутствуют или отличаются.

И здесь большое спасибо ivan-lev, за пост номер 9 в этой теме, где он дал ссылку сюда.

Что скажете, друзья?

Как по мне - решение неплохое. Нагрузка на БД будет только в моменты сохранения постов, что приемлемо.

Вывод CPF'ов на страницах будет происходить стандартным способом WP - используя get_post_meta( get_the_ID(), ... );.

SeVlad
На сайте с 03.11.2008
Offline
1609
#22
Jovian:
Вывод CPF'ов на страницах будет происходить стандартным способом WP - используя get_post_meta( get_the_ID(), ... );

Вот основная нагрузка. Ты же хочешь вывести 200-300 постов (СРТ) со "некоторыми" CPF. Т.е. это тысячи запросов.

А при сохранении это такие мелочи :)

кеширование, кеширование и ещё раз кеширование.

Ну а сам способ реализации задачи "общих данных" хотя и несёт некоторую избыточность, но почему бы и нет.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
J
На сайте с 21.08.2011
Offline
78
#23
SeVlad:
Вот основная нагрузка. Ты же хочешь вывести 200-300 постов (СРТ) со "некоторыми" CPF. Т.е. это тысячи запросов.

Нет-нет, там всё в одном вордпрессовском Loop'е, поэтому запросов много нет - насколько я знаю, оно штатно кэшируется.

Поправьте, если я не прав.

SeVlad
На сайте с 03.11.2008
Offline
1609
#24
Jovian:
Нет-нет, там всё в одном вордпрессовском Loop'е, поэтому запросов много нет - насколько я знаю, оно штатно кэшируется.

Поправьте, если я не прав.

Признаться, заставил задуматься-засомневаться :).. Могу ошибаться, но по-моему не прав.

J
На сайте с 21.08.2011
Offline
78
#25
SeVlad:
Могу ошибаться, но по-моему не прав.

То есть, ты думаешь, что код такого вида создаст здоровенную кучу запросов и нагрузку? WP Loop (всего постов 300 штук):

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>


$var1 = get_post_meta( get_the_ID(), 'custom_filed1', true);
$var2 = get_post_meta( get_the_ID(), 'custom_filed2', true);
// ещё 30-40 штук разных

<div><?php echo $var1 ?></div>
<div><?php echo $var2 ?></div>
// ещё echo все 30-40 штук

<?php endwhile; endif;?>


---------- Добавлено 05.09.2013 в 17:39 ----------

А ещё я случайно нашёл вот такую ОЧЕНЬ интересную штуку...
SeVlad
На сайте с 03.11.2008
Offline
1609
#26
Jovian:
То есть, ты думаешь, что код такого вида создаст здоровенную кучу запросов и нагрузку?

Так как ты написал - наверное ещё больше, чем если сделать правильно - перебором массива (через foreach например) ;).

У тебя ж там не 30-40шт вычислений\выводов, а 30-40шт Х 200-300CPT = 6000-12000.

Хотя повторюсь - я не уверен. Как-то не вникал в такие нюансы.

Ты же, как я погляжу, с английским дружишь (в отличии от меня ;) ), думаю сможешь найти эту инфу и поделиться с народом :)

Jovian:
А ещё я случайно нашёл вот такую ОЧЕНЬ интересную штуку...

Если ты про плаг, то, да плаг хорош, но не всемогущ. Он много чего пропускает. А русский там такой, что лучше бы он был английским :)

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

J
На сайте с 21.08.2011
Offline
78
#27
SeVlad:
Так как ты написал - наверное ещё больше, чем если сделать правильно - перебором массива (через foreach например)

Дык, while есть тот же перебор, но с параметром.

Запрос к базе один, но выполнение ресурсоёмкое. Не? :)

Я сам PHP только недавно стал изучать - нуб пока. :)

SeVlad:
Ты же, как я погляжу, с английским дружишь

Дружу. Даже предпочитаю на нём гуглить и изучать php, js и т.д. ;)

SeVlad:
думаю сможешь найти эту инфу и поделиться с народом

Тут не просто найти - надо допереть и понять самому, как оно происходит. Но, вроде, из того, что я понял, читая про ВП, Loop не нагружает БД уймой запросов.

Надо будет ещё почитать на эту тему.

SeVlad:
На реальных сайтах всё же лучше чуток заморочится и вручную прописать.

Я тоже так думал, пока не стал этот плагин юзать - очень удобная и стабильная штука оказалась. Она не урезает и не скрывает функционал CPT/CPF. Всё есть - не надо дополнительно кодить.

И вот эти "связи" разных CPT - клёвая штука, о существовании которой я только сейчас узнал.

Оно решает мою проблему, не заставляя даже кодить! О_о

---------- Добавлено 05.09.2013 в 19:25 ----------

Сейчас я с помощью этого плагина (Types) попробовал сделать связь CPT "модель двигателя" и CPT "модель авто", где первый является "родителем" (так как к нему должно "относиться" много разных моделей авто), а второй "ребёнком".

Настроил так, что те самые часто меняющиеся CPF принадлежат "родителю", но они также выводятся на страницах редактирования "детей".

На страницах редактирования "родителя" появляется весь список "детей" и эти поля для быстрого редактирования. Удобно!

Единственное, что не нравится, надо править поля для каждого "ребёнка" - они не берут изначально данные "родителя"...

SeVlad
На сайте с 03.11.2008
Offline
1609
#28
Jovian:
Дык, while есть тот же перебор, но с параметром.

:) В данном случае не о том переборе речь :)

Я имел ввиду

$my_custom_field = get_post_meta($post->ID, $mykey, false);
foreach ( $my_custom_field as $key => $value )
echo $key . " => " . $value . "<br />";

Хотя, да я забыл, тебе же не все, а только несколько значений дано получить. Тогда наверное не стоит городить огород.

Jovian:
Я тоже так думал, пока не стал этот плагин юзать - очень удобная и стабильная штука оказалась. Она не урезает и не скрывает функционал CPT/CPF. Всё есть - не надо дополнительно кодить

Да удобная, кто ж спорит. Я ж говорю - наверное лучший из аналогов. В 99% случаев он вполне..

Но вот есть там не всё (во всяком случае с полгода назад). Я сейчас не вспомню чего конкретно нет, но нет. И на оф форуме ВП не так давно тоже разбирали проблемку, оказалось именно из-за этого плага. То ли из-за дефолтных значений, которые нельзя изменить (нет их в настройках), то ли просто из-за нехватки этих настроек.

И опять же. быстрота работы. Этот функционал работает на фронтеэнде. А настройки не прописываются в functions.php, а хранятся в базе. Так что, как мне кацца, это доп нагрузка.

Да, был какой-то аналогичный плаг, который в админке генерил код, который по идее должен быть в functions.php. Я первое время его юзал для того, что бы не писать вручную :) Настроил - скопировал - вставил.

Сейчас, если доходит дело до этого - мне проще скопировать из ранних проектов (или даже нагугленого и мануалов ;) ) и просто изменить что надо :)

J
На сайте с 21.08.2011
Offline
78
#29
SeVlad:
В данном случае не о том переборе речь
Я имел ввиду

Не закешируется каким-нибудь W3 Total Cache? :)

Я не могу использовать each, так как на страницах манипулирую (куча разного php кода) данными и выводом в зависимости от содержания meta_value в том или ином meta_key.

Иначе мне и не надо было бы иметь столько разных CPF - всё запихнул бы в text_area, да и всё... :)

SeVlad
На сайте с 03.11.2008
Offline
1609
#30
Jovian:
Не закешируется каким-нибудь W3 Total Cache?

Думаю закешируется сгенерённая страница, а не отдельные данные с неё :)

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий