Прекрепила или прикрепила как пишется правильно

Нацрежим нормативно закрепленная система правил для поддержки отечественных поставщиков тру и поставщиков стран еаэс. национальный режим в закупках выражается

Нацрежим — нормативно закрепленная система правил для поддержки отечественных поставщиков ТРУ и поставщиков стран ЕАЭС. Национальный режим в закупках выражается в запретах, ограничениях и условиях допуска.

Главное преимущество нацрежима в том, что он позволяет не зависеть от зарубежных поставок и развивать собственную экономику. На этом фоне очевидно, что одним из главных критериев, необходимых при рассмотрении и оценке заявок, становится страна происхождения товара. Другими словами, больше шансов получить контракт у тех, кто производит, предлагает и закупает российскую продукцию или продукцию стран ЕАЭС.

В 2021 году указывать страну происхождения товара необходимо при совершении любой закупки товара (работ/услуг с одновременной поставкой товара): в извещении, документации, контракте, реестре контракта, приемочных документах, товарной накладной и прочих информационных документах это указание обязательно должно быть. Информацию о наличии страны происхождения товара на всех этапах закупки контролирует Казначейство РФ.

Главные особенности нацрежима в закупках по 44-ФЗ в вопросах и ответах 

  1. На основании каких нормативных документов действует нацрежим? На какие законы ссылаться?
  2. Какие товары попадают под запрет нацрежима?
  3. Где посмотреть условия допуска иностранных товаров к закупкам по нацрежиму? Есть ли какие-то ограничения?
  4. Чем запреты в нацрежиме отличаются от ограничений?
  5. Как работает правило «третий лишний»?
  6. В каких случаях запреты не действуют?
  7. Как узнать, что закупка проводится по нацрежиму?
  8. Какие документы необходимо предоставить участнику закупки в заявке, чтобы подтвердить свое соответствие требованиям ст. 14 Закона № 44-ФЗ? 
  9. Какие документы прикрепить для подтверждения российского производства товара? 
  10. В каком случае заявку с иностранным товаром надо отклонить, если на рассмотрении несколько заявок? 

На основании каких нормативных документов действует нацрежим? На какие законы ссылаться?

Общий подход к требованиям национального режима содержит ст. 14 Закона о контрактной системе 44-ФЗ. Правительство РФ оставляет за собой право принимать решения, связанные с ограничением и запретом на допуск товаров иностранного производства, работ и услуг для государственных и муниципальных нужд. Нацрежим носит отраслевой характер и регулируется специальными Постановлениями Правительства РФ. Их достаточно много, и в данном случае именно они имеют решающее значение при осуществлении закупок.

Какие товары попадают под запрет нацрежима?

Список товаров, происходящих из иностранных государств, на закупку которых установлен запрет в условиях национального режима, указан в Постановлении Правительства РФ от 30.04.2020 № 616. Данный нормативный акт содержит 125 товарных позиций, запрещенных для приобретения госзаказчиками. 

Также запреты на приобретение товара в рамках нацрежима установлены в Постановлении Правительства РФ от 21.12.2019 № 1746 «Об установлении запрета на допуск отдельных видов товаров, происходящих из иностранных государств, и внесении изменений в некоторые акты Правительства Российской Федерации». В частности, действует запрет на программно-аппаратные комплексы систем хранения данных, относящихся к коду по Общероссийскому классификатору продукции по видам экономической деятельности ОК 034-2014 (КПЕС 2008) 26.20.2 «Устройства запоминающие и прочие устройства хранения данных» (далее — товары), происходящих из иностранных государств.

Постановление Правительства РФ от 16.11.2015 № 1236 (ред. от 30.03.2019) «Об установлении запрета на допуск программного обеспечения, происходящего из иностранных государств, для целей осуществления закупок для обеспечения государственных и муниципальных нужд» устанавливает запрет на допуск программ для электронных вычислительных машин и баз данных, реализуемых независимо от вида договора на материальном носителе и (или) в электронном виде по каналам связи, происходящих из иностранных государств (за исключением программного обеспечения, включенного в единый реестр программ для электронных вычислительных машин и баз данных из государств — членов Евразийского экономического союза, за исключением Российской Федерации (далее — реестр евразийского программного обеспечения), а также исключительных прав на такое программное обеспечение и прав использования такого программного обеспечения (далее — программное обеспечение и (или) права на него).

Как применять условия национального режима при закупке радиоэлектронной продукции в 2021 году, рассказал в ходе вебинара, посвященного этим вопросам, эксперт в области антимонополного права и законодательства о закупках 44-ФЗ и 223-ФЗ, к.э.н., ведущий лектор Контур.Школы Петр Воронцов. 

Где посмотреть условия допуска иностранных товаров к закупкам по нацрежиму? Есть ли какие-то ограничения?

Условие допуска иностранных товаров, работ и услуг содержит Приказ Минфина от 04.06.2018 № 126н.

Ограничения на поставку иностранных товаров действуют для отдельных позиций, среди которых медицинские изделия, лекарства, продукты, радиоэлектроника. Есть еще один нормативный документ — Постановление Правительства РФ от 30.04.2020 № 617. Он содержит около 200 новых позиций, которые попали под ограничения.

Чем запреты в нацрежиме отличаются от ограничений?

Запреты носят абсолютный характер: есть товарные позиции, которые в случае происхождения из иностранных государств по общему правилу приобретать нельзя. Список таких товаров указан в Постановлении Правительства РФ от 30.04.2020 № 616. Но есть и товарные позиции, на приобретение которых введены не запреты, а ограничения. Возможность провести такую закупку есть, но с учетом соблюдения определенных условий. Предусмотрены преференции для товаров из России, а также стран ЕАЭС, которые позволяют закупочной комиссии поставить заявкам более высокий балл и таким образом создать преимущества при участии в закупке, повысив тем самым их шансы победить.

Все ограничения, запреты и допуски носят точечный, отраслевой характер: конкретные товарные позиции указаны в соответствующем нормативном акте Правительства РФ.

Как работает правило «третий лишний»?

Согласно правилу «третий лишний» разрешается приобретать товары иностранного производства только в том случае, когда предложения на закупку прислали менее двух российских поставщиков. Причем это должны быть предложения от разных российских производителей или их представителей.

Случаи, когда заказчик использует правило «третий лишний» при рассмотрении заявок: отклоняются все заявки, которые содержат предложение о поставке иностранной продукции, если среди всех заявок есть хотя бы две, которые одновременно:

  • содержат предложения о поставке российской продукции;
  • не содержат предложений о поставке одного и того же вида продукции одного производителя либо производителей, входящих в одну группу лиц;
  • соответствуют требованиям извещения (документации) о закупке.

В каких случаях запреты не действуют?

Запреты на закупку товара иностранного производства не действуют в нескольких случаях:

  • Товар не производится на территории РФ. При этом закупка должна сопровождаться разрешением Минпромторга.
  • Стоимость одной единицы товара не превышает 100 тыс. руб., а общая стоимость единиц товара не превышает 1 млн руб.
  • Продукция определенного товарного знака, и только в том случае, если заказчику необходимо совместить новый товар с тем, который у него уже есть. Например, это может быть необходимость дополнить, расширить или модернизировать уже имеющееся и функционирующее оборудование. Исключение — закупка тракторов и пищевого оборудования.
  • Запасные части к иностранным товарам, оборудованию, которое уже использует заказчик: в соответствии с технической документацией он имеет право приобретать оригинальные комплектующие у производителя или того, кто способен их поставить.
  • Некоторые закупки ФСО, МВД, Службы внешней разведки, нацгвардии и подведомственных им организаций.
  • Закупки товаров ФСО, осуществляемые в целях реализации мер по осуществлению государственной охраны, а также закупки транспортных средств МВД для обеспечения безопасности объектов государственной охраны и проведения оперативно-поисковых мероприятий.
  • Не распространяется на осуществление закупок программного обеспечения и (или) прав на него дипломатическими представительствами и консульскими учреждениями Российской Федерации, торговыми представительствами Российской Федерации при международных организациях для обеспечения своей деятельности на территории иностранного государства.

Как узнать, что закупка проводится по нацрежиму?

Указание на такую закупку должно содержаться в документации заказчика: вся информация о национальном режиме прописывается в извещении о закупке, в документации, а также сам заказчик должен описать, как работают правила нацрежима. Участники же, в свою очередь, обязаны предоставлять документы и сведения, указанные в нормативных актах, подтверждающие страну происхождения товара. Это указание служит доказательством для заказчика, что товар соответствует всем заявленным требованиям по нацрежиму.

В условиях пандемии вступил в силу принцип срочной закупки у единственного поставщика. На основании п. 9 ч. 1 ст. 93 Закона 44-ФЗ Заказчик вправе приобрести товар любого происхождения, если это необходимо для ликвидации последствий или предупреждения распространения коронавирусной инфекции. Исключение — запреты по национальному режиму: даже в этом случае их необходимо соблюдать!

Какие документы необходимо предоставить участнику закупки в заявке, чтобы подтвердить свое соответствие требованиям ст. 14 Закона № 44-ФЗ?

Если на товар распространяется национальный режим, заказчик заранее, еще в документации, должен указать ссылку на постановление правительства, в соответствии с которым действует нацрежим. Какой документ прикладывать к заявке, зависит от вида продукции. Это может быть:

  • выписка из реестра российской промышленной продукции или реестра евразийской промышленной продукции;
  • декларация в свободной форме о стране происхождения;
  • акт экспертизы ТПП;
  • сертификат происхождения СТ-1;
  • копия специального инвестиционного контракта.

Другими словами, вид документа может варьироваться в зависимости от вида товара. Это регулируется документами правительства.

Применение нацрежима

Национальный режим и преференции в госзакупках. Обучение для заказчиков и поставщиков по 44-ФЗ

Программа курса

Какие документы прикрепить для подтверждения российского производства товара?

При подаче заявки, как правило, факт того, что товар отечественного производства, лишь декларируется. Далее, в зависимости от требований нормативных актов по национальному режиму, если закупка попадает под соответствующие постановления, может потребоваться:

  • сертификат СТ-1, выдаваемый ТПП; или
  • выписка из реестра российской промышленной продукции или реестра евразийской промышленной продукции с указанием номеров реестровых записей; или
  • информация о совокупном количестве баллов за выполнение технологических операций (условий) на территории РФ, если такое предусмотрено Постановлением Правительства РФ от 17.02.2015 № 719.

Прежде чем подать заявку, всегда внимательно изучайте требования к ее составу и содержанию. В зависимости от условий закупки в документации будет указана инструкция к ее заполнению.

В каком случае заявку с иностранным товаром надо отклонить, если на рассмотрении несколько заявок?

Рассмотрим на примере. Подана заявка на закупку с условиями допуска товаров иностранного происхождения и еще две заявки с товарами из стран ЕАЭС, соответствующие требованиям: то есть заявки с разными товарами от разных производителей. В этом случае заказчик должен использовать правило «третий лишний» и отклонить заявку. Например, первая заявка содержит по большей части товар производства РФ, но 40% позиций из Китая. Вторая заявка содержит товары только российского производства. Третья заявка предлагает товары РФ и Беларуси. Ознакомившись с тремя заявками, заказчик отклоняет первую, так как в его распоряжении есть еще две с товарами, которые полностью соответствуют условиям национального режима.

Информация для заявителя о его праве подать жалобу на нарушение порядка предоставления услуги (жалоба).

Заявители имеют право на досудебное (внесудебное) обжалование решений и действий (бездействия) образовательных организаций, а также должностных лиц образовательных организаций в ходе предоставления услуги.

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

Заявитель может подать жалобу в том числе в следующих случаях:

  • нарушение срока регистрации запроса о предоставлении услуги;
  • нарушение срока предоставления услуги;
  • требование у заявителя документов, не предусмотренных нормативными правовыми актами РФ, нормативными правовыми актами Санкт‑Петербурга для предоставления услуги;
  • отказ в приеме у заявителя документов, представление которых предусмотрено нормативными правовыми актами РФ, нормативными правовыми актами Санкт‑Петербурга для предоставления услуги;
  • отказ в предоставлении услуги, если основания отказа не предусмотрены федеральными законами и принятыми в соответствии с ними иными нормативными правовыми актами РФ, законами и иные нормативными правовыми актами Санкт‑Петербурга;
  • требование с заявителя при предоставлении услуги платы, не предусмотренной нормативными правовыми актами РФ, нормативными правовыми актами Санкт‑Петербурга;
  • отказ должностного лица образовательной организации в исправлении допущенных опечаток и ошибок в выданных в результате предоставления услуги документах либо нарушение установленного срока таких исправлений;
  • нарушение срока или порядка выдачи документов по результатам предоставления услуги;
  • требование у заявителя при предоставлении услуги документов или информации, отсутствие и (или) недостоверность которых не указывались при первоначальном отказе в приеме документов, необходимых для предоставления услуги, либо в предоставлении услуги, за исключением случаев, предусмотренных пунктом 4 части 1 статьи 7 Федерального закона №210‑ФЗ.

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

  • оформленная в соответствии с законодательством РФ доверенность (для физических лиц);
  • копия решения о назначении или об избрании либо приказа о назначении физического лица на должность, в соответствии с которым такое физическое лицо обладает правом действовать от имени заявителя без доверенности.

Предмет жалобы

Жалоба должна содержать:

  • наименование образовательной организации, должность и фамилию, имя, отчество (последнее при наличии) должностного лица образовательной организации, решения и действия (бездействие) которых обжалуются;
  • фамилию, имя, отчество (последнее при наличии), сведения о месте жительства заявителя — физического лица либо наименование, сведения о месте нахождения заявителя — юридического лица, а также номер (номера) контактного телефона, адрес (адреса) электронной почты (при наличии) и почтовый адрес, по которым должен быть направлен ответ заявителю;
  • сведения об обжалуемых решениях и действиях (бездействии) образовательной организации, должностного лица образовательной организации, в том числе в случае подачи жалобы в МФЦ или через портал — вид нарушения, указанный в пункте 5.1.1 регламента;
  • доводы, на основании которых заявитель не согласен с решением и действием (бездействием) образовательной организации, должностного лица образовательной организации.

Заявителем могут быть представлены документы (при наличии), подтверждающие доводы заявителя, либо их копии.

Исполнительные органы и уполномоченные на рассмотрение жалобы должностные лица, которым может быть подана жалоба в досудебном (внесудебном) порядке

Жалоба подается в образовательную организацию, предоставляющую услугу.

Жалоба также может быть подана в ИОГВ, в ведении которого находится образовательная организация.

Способы подачи и рассмотрения жалобы

Жалоба может быть подана:

  • в электронной форме;
  • в письменной форме на бумажном носителе.

Подача жалобы в письменной форме на бумажном носителе осуществляется:

  • по почте;
  • через МФЦ;
  • при личном приеме заявителя должностным лицом образовательной организации или ИОГВ, в ведении которого находится образовательная организация.

При личном приеме при подаче заявителем жалобы заявитель представляет документ, удостоверяющий его личность в соответствии с законодательством РФ.

В электронной форме могут быть представлены документы, указанные в пункте 5.1.2 регламента, при этом документ, удостоверяющий личность заявителя, не требуется.

Подача жалобы в электронной форме осуществляется с использованием сети «Интернет» посредством официального сайта образовательной организации в информационно‑телекоммуникационной сети «Интернет», портала.

Заполнение запроса о рассмотрении жалобы через портал производится заявителем лично при условии авторизации заявителя на портале посредством ЕСИА.

Порядок рассмотрения жалобы

Жалоба на решения и действия (бездействие) должностных лиц образовательной организации рассматривается образовательной организацией, предоставляющей услугу, порядок предоставления которой был нарушен вследствие решений и действий (бездействия) образовательной организации, ее должностного лица. В случае если обжалуются решения руководителя образовательной организации, жалоба подается в ИОГВ, в ведении которого находится образовательная организация, и рассматривается в установленном порядке.

МФЦ, в случае подачи жалобы через МФЦ, обеспечивает передачу жалобы в образовательную организацию или исполнительный орган государственной власти Санкт‑Петербурга, в ведении которого находится образовательная организация, не позднее следующего рабочего дня со дня поступления жалобы.

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

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

ИОГВ вправе оставить жалобу без ответа в следующих случаях:

  • наличие в жалобе нецензурных либо оскорбительных выражений, угроз жизни, здоровью и имуществу должностного лица, а также членов его семьи;
  • отсутствие возможности прочитать какую‑либо часть текста жалобы, фамилию, имя, отчество (при наличии) и (или) почтовый адрес заявителя, указанные в жалобе.

В случае оставления жалобы без ответа ИОГВ в течение трех рабочих дней со дня регистрации жалобы сообщает об этом заявителю, направившему жалобу, если его фамилия и почтовый адрес поддаются прочтению.

Сроки рассмотрения жалобы

Срок рассмотрения жалобы исчисляется со дня регистрации жалобы в образовательной организации, в ИОГВ, в ведении которого находится образовательная организация, в Комитете по образованию, в Комитете по информатизации и связи.

Жалоба, поступившая в образовательную организацию или ИОГВ, подлежит регистрации не позднее следующего рабочего дня со дня ее поступления. Жалоба подлежит рассмотрению должностным лицом, работником, наделенным полномочиями по рассмотрению жалоб, в течение пятнадцати рабочих дней со дня ее регистрации.

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

Результат рассмотрения жалобы

По результатам рассмотрения жалобы образовательная организация принимает одно из следующих решений:

  • жалоба удовлетворяется, образовательная организация принимает исчерпывающие меры по устранению выявленных нарушений, в том числе по выдаче заявителю результата предоставления услуги, не позднее 5 рабочих дней со дня принятия решения;
  • в удовлетворении жалобы отказывается.

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

Образовательная организация или ИОГВ отказывает в удовлетворении жалобы в следующих случаях:

  • наличие вступившего в законную силу решения суда, арбитражного суда по жалобе о том же предмете и по тем же основаниям;
  • подача жалобы лицом, полномочия которого не подтверждены в порядке, установленном законодательством РФ;
  • наличие решения по жалобе, принятого ранее в соответствии с требованиями настоящего регламента в отношении того же заявителя и по тому же предмету жалобы.

Указанное решение принимается в форме акта образовательной организации.

Порядок информирования заявителя о результатах рассмотрения жалобы

При удовлетворении жалобы образовательная организация принимает исчерпывающие меры по устранению выявленных нарушений, в том числе по выдаче заявителю результата предоставления услуги, не позднее 5 рабочих дней со дня принятия решения.

Не позднее дня, следующего за днем принятия решения, заявителю в письменной форме и по желанию заявителя в электронной форме направляется мотивированный ответ о результатах рассмотрения жалобы.

В ответе по результатам рассмотрения жалобы указываются:

  • наименование образовательной организации, должность, фамилия, имя, отчество (при наличии) должностного лица, принявшего решение по жалобе;
  • номер, дата, место принятия решения, включая сведения о должностном лице, работнике, решение или действие (бездействие) которого обжалуется;
  • фамилия, имя, отчество (при наличии) или наименование заявителя;
  • основания для принятия решения по жалобе;
  • принятое по жалобе решение;
  • в случае если жалоба признана обоснованной — сроки устранения выявленных нарушений, в том числе срок предоставления результата услуги;
  • в случае если жалоба признана не обоснованной — аргументированные разъяснения о причинах принятого решения, а также информация о порядке обжалования принятого решения.

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

Ответ по результатам рассмотрения жалобы подписывается уполномоченным на рассмотрение жалобы должностным лицом образовательной организации, наделенным полномочиями по рассмотрению жалоб.

По желанию заявителя ответ по результатам рассмотрения жалобы может быть представлен не позднее дня, следующего за днем принятия решения, в форме электронного документа, подписанного электронной подписью уполномоченного на рассмотрение жалобы должностного лица образовательной организации, вид которой установлен законодательством РФ.

Порядок обжалования решения по жалобе

Решение, принятое по результатам рассмотрения жалобы, может быть обжаловано вице‑губернатору Санкт‑Петербурга, непосредственно исполнительному органу государственной власти Санкт‑Петербурга, в ведении которого находится образовательная организация, в Правительство Санкт‑Петербурга, а также в суд в порядке и сроки, предусмотренные действующим законодательством.

Заявитель имеет право на получение информации и документов, необходимых для обоснования и рассмотрения жалобы.

Информирование заявителей о порядке подачи и рассмотрения жалобы осуществляется посредством размещения информации на портале.

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

Положения раздела, устанавливающие порядок подачи и рассмотрения жалоб заявителей на нарушения их прав при предоставлении услуг, не распространяются на отношения, регулируемые Федеральным законом «О порядке рассмотрения обращений граждан РФ» (Закон №59‑ФЗ).

Жалобы заявителей на организацию предоставления услуг в Комитет по образованию, Комитет по информатизации и связи подаются и рассматриваются в порядке, предусмотренном Законом №59‑ФЗ.

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

Есть два типа хуков:

Фильтр (filter)
Изменяет значение переменной — получает значение и возвращает его (изменённое или нет).
Событие (action)
Запускает произвольный код — колбэк функция прикрепленный к хуку сработает в момент срабатывания хука в коде.

К хукам (фильтрам, событиям) прикрепляются PHP функции (callbacks), затем эти функции сработают, в момент срабатывания хука. Такое поведение в программировании называется перехват.

В функцию прикрепленную к хуку могут передаваться параметры (дополнительные данные). На основе этих данных в функции можно создавать какую-либо логику. Читайте ниже.

Простой пример хука-события (action):

// создадим функцию для хука - события
function echo_1(){ echo 1; }

// привяжем функцию к хуку
add_action( 'my_hook', 'echo_1' );

// создаем хук
do_action( 'my_hook' ); //> выведет 1

Пример с передачей параметра:

// создадим функции для событий
function echo_1( $data ){
	echo $data[0] .' '. $data[1] .'!';
}

// привяжем функции к хуку
add_action( 'my_hook', 'echo_1' );

// создаем хук
do_action( 'my_hook', [ 'Привет', ' мир' ] ); //> выведет "Привет мир!"

В программной части фильтры и события — это одно и тоже, т.е. в коде работает и то и другое одинаково, можно например заменять функцию add_filter() на add_action() — все будет работать! Разделение нужно, потому что это разные вещи по смыслу.

Список всех хуков WP смотрите на странице «Все хуки WordPress».

Всего в WordPress их около 2000. Некоторые важные хуки я описал и продолжаю описывать, они находятся тут.

Как работают Фильтры в WordPress

Для работы фильтра используются две функции:

  1. add_filter( hook_name, function, priority, args_num ) — добавляет/прикрепляет функцию к фильтру, которая будет вызвана в момент срабатывания фильтра. Такая функция называется «коллбэк-функция».

  2. apply_filters( hook_name, value, args… ) — создает хук-фильтр. Запускает прикрепленные к фильтру коллбэк-функцию.

На момент срабатывания хука в нём отработают только те коллбэки, которые уже были добавлены. Т.е. прикреплять коллбэк нужно до того как фильтр будет вызван с помощью apply_filters().

Пример

// коллбэк-функция
function my_filter_function( $str ){
	return 'Здравствуйте '. $str;
}

// Прикрепим коллбэк к фильтру.
add_filter( 'my_filter', 'my_filter_function' );

// Вызов фильтра
$name = apply_filters( 'my_filter', 'Владимир' );

echo $name; //> Здравствуйте Владимир

Еще пример

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

function text( $text ){

	// удалим html теги из текста
	$text = strip_tags( $text );

	// возвращаем текст через фильтр.
	return apply_filters( 'my_filter_name', $text );
}

// коллбэк функция
function my_filter_function( $text ){

	// обрежем текст до 30 знаков
	return mb_substr( $text, 0, 30 ) .'...';
}

// Прикрепим функцию к фильтру
add_filter( 'my_filter_name', 'my_filter_function' );

// Вызываем text()
// функция удалит из текста html теги — это сделает она сама с помощью strip_tags().
// А дальше обрежет текст — это сделает наш фильтр

$text = 'Lorem <b>Ipsum</b> is simply dummy text of the printing and typesetting industry.';

echo text( $text );

// выведет:
// Lorem Ipsum is simply dummy te...

Фильтров в WordPress много и вы наверняка с ними встречались в темах и плагинах. Популярные из них: the_content, body_class, sanitize_user, comment_form.

меню

Как работают События в WordPress

Для работы события используются две функции:

  1. add_action( hook_name, function, priority, args_num ) — добавляет/прикрепляет функции к событию, которое вызывается с помощью do_action(). Функция должна прикрепляться к событию до того, как событие произойдет. Нужно это, чтобы во время срабатывания события PHP функции уже были прикреплены к событию.

  2. do_action( hook_name, args… ) — это и есть событие. Запускает/вызывает добавленные к событию функции. Вызывается там, где должно сработать событие.

do_action() должна вызываться после add_action(), т.е. после того, как к событию добавлена функция, что логично…

Пример

Допустим, мы делаем тему и в каком-то месте темы нам нужно вызвать функцию, но мы заранее не знаем как функция будет называться. Т.е. пользователи сами будут добавлять функцию в это место.

Для этого в этом месте шаблона мы может вызвать не функцию а событие, назовем его my_action и затем прикрепить к этому событию функцию:

// создадим функцию для события
function my_action_function( $text ){
	echo 'Событие "my_action" сработало сейчас.';
}
// Прикрепим функцию к событию 'my_action'. Это можно сделать в другом файле
// главное до того как событие сработает.
add_action( 'my_action', 'my_action_function' );

// Вызов самого события. Вставляем эту строку в то место темы где нужно,
// чтобы сработала прикрепленная к нему функция
do_action( 'my_action' ); //> на месте этого кода будет выведена надпись:
						  // 'Событие "my_action" сработало сейчас.'

С событиями вы тоже встречались их много и одни из самых популярных это: wp_head, wp_footer.

меню

Приоритет хука

Приоритет важен когда к хуку прикрепляется несколько callback-функций. Приоритет определяет порядок, когда callback-функция будет выполняться по отношению к другим callback-функциям.

Приоритет указывается в третьем параметре для функции которая прикрепляет функцию к хуку:

add_action( 'init', 'hook_callback1', 8 );
add_action( 'init', 'hook_callback2', 9 );

Функция с приоритетом 8 выполнится раньше функции с приоритетом 9. Если приоритет не указан, то он равен 10 — приоритет по умолчанию.

Если две функции прикреплены к одном хуку с одинаковым приоритетом, то они будут выполняться в порядке их прикрепления.

Рассмотрим как работают приоритеты на примере:

add_action( 'init', 'run_me_late', 11 );
add_action( 'init', 'run_me_early', 9 );
add_action( 'init', 'run_me_normal' );     // приоритет 10 по умолчанию
add_action( 'init', 'run_me_normal_two' ); // приоритет 10 по умолчанию

В момент срабатывания хука init функции выполняться в следующем порядке:

  1. run_me_early()
  2. run_me_normal()
  3. run_me_normal_two()
  4. run_me_late()
  • Как видно, чем больше число приоритета, тем позднее выполниться хук.

  • Если приоритет не указан, как в первом примере, то он равен 10.

Для фильтров приоритеты работают точно также.

меню

Параметры хука

В прикрепляемую коллбэк-функцию могут передаваться какие-то данные — параметры. Их можно использовать в момент срабатывания хука, чтобы создать какую-то логику.

Например, когда WordPress сохраняет запись, запускается событие save_post. Этот хук может передать два параметра: ID записи и объект записи:

do_action( 'save_post', $post->ID, $post );

По умолчанию передается только первый параметр $post->ID:

add_action( 'save_post', 'my_save_post_callback' );

function my_save_post_callback( $post_id ) {
	// доступен один параметр
}

Однако можно указать что мы хотим получить 2 параметра. Для этого укажем четвертый параметр add_action():

add_action( 'save_post', 'my_save_post_callback', 10, 2 );

function my_save_post_callback( $post_id, $post ) {
	// доступны 2 параметра
}

Ограничение в один параметр по умолчанию сделано для быстродействия системы хуков.

Для фильтров все работает аналогично

При создании фильтра в него можно передать сколько угодно параметров через запятую:

$str = apply_filters( 'my_filter', $str, $data1, $data2 );

Теперь, при добавлении коллбэка. Мы можем использовать эти параметры. Для этого нужно указать количество передаваемых параметров:

add_filter( 'my_filter', 'my_filter_function', 10, 3 );

3 — количество параметров, которые получит функция my_filter_function() в момент вызова.

Функция фильтра будет выглядеть так:

function my_filter_function( $str, $data1, $data2 ){

	// Можем использовать $data1, $data2

	return $str;
}

меню

Удаление хука

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

Для удаления функции привязанной к фильтру или событию, используется одна из функций:

  • remove_action()
  • remove_filter()

Для справки. Это полностью одинаковые функции и обе они удаляют хук, а фильтр это или событие, в данном случае, значения не имеет. Так например, событии и фильтр мы можем удалить используя только функцию remove_filter() или только remove_action(). Но для понятности кода, все же лучше фильтры удалять с помощью remove_filter(), а события с помощью remove_action().

Для удаления хука нужно знать:

  • название хука, например wp_footer;
  • название прикрепленной функции, например my_action_function из примера выше;
  • приоритет выполнения хука, если он был установлен при создании хука. Если при создании приоритет не был установлен, то он равен 10 и при удалении его указывать не обязательно

Если нужно удалить хук с приоритетом отличным от 10 и вы его не указали, то хук НЕ будет удален!

Пример удаления хука

Допустим где-то в плагине, к событию wp_footer прикреплена функция my_action_function, которая выводит текст в подвале темы:

add_action( 'wp_footer', 'my_action_function' );

function my_action_function( $text ){
	echo 'Это текст в подвале!';
}

В теме нам нужно удалить это событие, чтобы текст в подвале не выводился. Для этого в файле темы functions.php можно прописать такой код:

remove_action( 'wp_footer', 'my_action_function' );

Важный момент: удалять хук нужно после того как он добавлен, но еще не отработал.

Еще пример удаления хука

Демонстрация добавления и удаления хука в одном коде:

// добавляем функцию к событию my_action
add_action( 'my_action', 'my_action_function' );

function my_action_function( $text ){
	echo 'Привет!';
}

// создаем событие
do_action( 'my_action' ); //> Привет!

// удаляем добавленное ранее событие
remove_action( 'my_action', 'my_action_function' );

// создаем событие еще раз
do_action( 'my_action' ); // ничего не выведет...

Удаление с приоритетом (приоритет должен совпадать):

add_filter( 'my_filter', 'function_name', 99 );    // так добавлен
remove_filter( 'my_filter', 'function_name', 99 ); // так нужно удалять

Удаление статического метода класса:

add_filter( 'my_filter', [ 'My_Class', 'method_name' ], 15 );    // так добавлен
remove_filter( 'my_filter', [ 'My_Class', 'method_name' ], 15 ); // так нужно удалять

Удаление не статического метода класса, который добавлен с использованием $this:

class A {

	function __construct(){
		add_action( 'my_action', [ $this, 'method_name' ], 15 );
	}

	function method_name(){
		echo 'Привет!';
	}
}

$class = new A; // экземпляр

// для удаления нужно найти переменную в которую был сохранен
// экземпляр класса при создании, сейчас это $class
remove_action( 'my_action', [ $class, 'method_name' ], 15 );

Удаление хука добавленного анонимной функцией

Удалить хук с замыканием не так просто, например такой код не сработает:

add_action( 'my_action', function(){  echo 'Привет!';  } );

remove_action( 'my_action', function(){  echo 'Привет!';  } ); // не работает!

Надежно удалить хук с использованием замыкания, можно только если замыкание создавалось в переменную и у нас есть доступ к этой переменной:

$my_func = function(){
	echo 'Привет!';
};

add_action( 'my_action', $my_func );

remove_action( 'my_action', $my_func ); // Работает!

Ненадежный, но все же способ удалить хук с замыканием, когда у нас нет доступа к замыканию:

/**
 * Removes the hook when it has been added by a closure.
 * The accuracy of the function is not guaranteed - the first hook
 * that matches the priority and the number of hook arguments will be removed.
 *
 * @param string $name
 * @param int    $priority
 * @param int    $accepted_args
 */
function kama_remove_closure_hook( $name, $priority = 10, $accepted_args = 1 ){
	global $wp_filter;

	$callbacks = & $wp_filter[ $name ]->callbacks[ $priority ];

	// find our hook
	// it is not always possible to identify it unambiguously
	// at least we know that it was created with a closure
	// and we know it's priority
	foreach( $callbacks as $key => $cb ){

		if( ! ( $cb['function'] instanceof Closure ) )
			continue;

		if( $cb['accepted_args'] !== $accepted_args )
			continue;

		// remove
		unset( $callbacks[ $key ] );

		// first suitable only
		break;
	}

}

Пример её использования:

add_action( 'my_action', function(){
	echo 'Привет!';
} );

do_action( 'my_action' ); // Привет!

kama_remove_closure_hook( 'my_action', 10, 1 );

do_action( 'my_action' ); // (пусто)

меню

Создание своего хука

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

Чтобы создать событие или фильтр в коде, к которому потом можно будет добавлять функции, используется функция

  • do_action() — для событий.
  • apply_filters() — для фильтров.

Синтаксис у этих функций такой:

do_action( $tag, $arg_a, $arg_b, ... );

apply_filters( $tag, $value, $arg_a, $arg_b, ... );
$tag(строка) (обязательный)
Название хука.
$value(строка/массив/число/объект/логический) (обязательный)
Значение, которое будет передаваться функции в её первом аргументе — значение, которое нужно отфильтровать.
$arg_a(строка/массив/число/объект/логический)
Значение аргумента.
$arg_b(строка/массив/число/объект/логический)
Значение еще одного аргумента.
Пример создания хука-события

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

Итак, у нас есть функция плагина add_vote() — записывает голос, в конец этой функции добавим событие:

function add_vote(){

	// код функции
	// тут определяется ID опроса - $poll_id и выбранный ответ - $answer
	// передадим эти данные в хук.

	// создаем хук
	do_action( 'my_plugin_add_vote', $poll_id, $answer );
}

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

add_action( 'my_plugin_add_vote', 'my_add_vote_logic', 10, 2 );

function my_add_vote_logic( $poll_id, $answer ){
	global $wpdb;

	// запишем в таблицу логов, заметку что кто-то проголосовал
	$wpdb->insert( $wpdb->log_table, [
		'user_id' => 5,
		'log_massage' => 'Проголосовали за опрос '. $get_poll( $poll_id )->name
	] );

}

меню

Функции хуков

Функция Описание
do_action() Создает событие (возможность запустить php функции в нужный момент работы кода). Подключать php функцию к событию нужно с помощью add_action().
do_action_ref_array() Создает событие (хук), на который затем можно прикрепить PHP функции. Аргументы передаются в виде массива.
do_action_deprecated() Fires functions attached to a deprecated action hook.
add_action() Прикрепляет указанную PHP функцию на указанный хук. Указанная функция сработает в момент события, которое в свою очередь запускается с помощью do_action().
remove_action() Удаляет хук (событие или фильтр). Удаляет функцию прикрепленную к указанному хуку.
remove_all_actions() Removes all of the callback functions from an action hook.
did_action() Получает число, сколько раз было вызвано указанное событие (хук).
current_action() Retrieves the name of the current action hook.
doing_action() Проверяет обрабатывается ли в текущий момент указанный хук (фильтр, событие).
has_action() Проверяет была ли зарегистрирована функция для хука-события.
apply_filters() Применяет прикрепленную к указанному фильтру PHP функцию.
apply_filters_ref_array() Выполняет функции прикрепленные к указанному хуку (фильтру). Параметры передаются в массиве. Позволяет передать параметр по ссылке.
apply_filters_deprecated() Fires functions attached to a deprecated filter hook.
add_filter() Прикрепляет указанную PHP функцию к указанному хуку-фильтру. Так, во время срабатывания фильтра значение будет обработано указанной PHP функцией.
remove_filter() Удаляет указанную функцию прикрепленную к указанному фильтру.
remove_all_filters() Удаляет все хуки у указанного фильтра.
current_filter() Получает название текущего фильтра.
has_filter() Проверяет была ли прикреплена к указанному фильтру какая-нибудь функция. Можно указать название конкретной функции.
doing_filter() Проверяет обрабатывается ли в текущий момент указанный хук (фильтр, событие).

меню

Вспомогательные WordPress функции для фильтров

В WordPress есть специальные функции, которые упрощают работу с фильтрами.

Например, мы может отключить все стандартные виджеты WordPress с помощью фильтра load_default_widgets, так:

function is_load_default_widgets(){
	return false;
}
add_filter( 'load_default_widgets', 'is_load_default_widgets' );

Или можно не создавать отдельную функцию которая вернет false, а использовать уже готовую функцию из ядра WordPress: __return_false():

add_filter( 'load_default_widgets', '__return_false' );

Чтобы было понятнее как это работает, давайте посмотрим на вызов фильтра load_default_widgets:

function wp_maybe_load_widgets(){

	if ( ! apply_filters( 'load_default_widgets', true ) )
		return;

	require_once( ABSPATH . WPINC . '/default-widgets.php' );

	add_action( '_admin_menu', 'wp_widgets_add_menu' );
}

При вызове функции wp_maybe_load_widgets() срабатывает фильтр. По умолчанию он всегда возвращает true и условие не выполняется — виджет подключаются. А в примерах выше мы возвращаем false и условие выполняется — виджеты не подключаются.

Это демонстративный пример из кода WordPress, чтобы объяснить принцип работы. В практике его лучше не использовать, для отключения виджетов используйте код из описания функции unregister_widget().

Аналогичный пример

Аналогичным образом можно выключить возможность публиковать записи по протоколу xmlrpc. Которой, кстати по умолчанию включен, но им мало кто пользуется.

// отключим публикацию по xmlrpc
add_filter( 'xmlrpc_enabled', '__return_false' );

Еще один пример

Закроем возможность сброса пароля, с помощью фильтра allow_password_reset:

add_filter( 'allow_password_reset', '__return_false' );

Теперь все пользователи не смогут сбрасывать пароли на сайте.

меню

Список всех хуков WordPress

Получить список всех хуков может понадобится. В процессе разработки или при поиске ошибок.

Как я упоминал выше все хуки записываются в общий массив, а точнее в глобальную переменную $wp_filters. К слову, если удалить из $wp_filters элемент массива (хук), то хук перестанет работать…

Следующий код выведет список всех хуков (фильтров и событий), которые зарегистрированы на момент вызова этого кода:

/**
 * Выводит на экран список всех хуков WordPress и функций к ним прикрепленных.
 *
 * @param строка $hook_name Название хука список фукнций которого нужно вывести.
 *
 * @version 2.1
 */
function hooks_list( $hook_name = '' ){
	global $wp_filter;
	$wp_hooks = $wp_filter;

	// для версии 4.4 - переделаем в массив
	if( is_object( reset( $wp_hooks ) ) ){
		foreach( $wp_hooks as & $object ) $object = $object->callbacks;
		unset( $object );
	}

	if( $hook_name ){
		$hooks[ $hook_name ] = @ $wp_hooks[ $hook_name ];

		if( ! is_array($hooks[$hook_name]) ){
			trigger_error( "Nothing found for '$hook_name' hook", E_USER_WARNING );
			return;
		}
	}
	else {
		$hooks = $wp_hooks;
		ksort( $wp_hooks );
	}

	$out = '';
	foreach( $hooks as $name => $funcs_data ){
		ksort( $funcs_data );
		$out .= "nхукt<b>$name</b>n";
		foreach( $funcs_data as $priority => $functions ){
			$out .= "$priority";
			foreach( array_keys($functions) as $func_name ) $out .= "t$func_namen";
		}
	}

	echo '<'.'pre>'. $out .'</pre'.'>';
}

Пример использования:

hooks_list();

/* Получим список такого формата:

хук wp_enqueue_scripts
10  lambda_2
99  theme_scripts_styles

хук wp_footer
0   0000000072b7ec0d00002b862c2211a0enqueue_jquery_if_need
10  0000000072b7edb400002b862c2211a0footer_scripts
	0000000072b7eb7b00002b862c2211a0main_js
20  wp_print_footer_scripts
99  0000000072b7ec0d00002b862c2211a0add_script_to_footer
	0000000072b7eb1600002b862c208180
	question_close_ajax_js
	add_question_rating_ajax_js
	add_comment_rating_ajax_js
999 0000000072b7edb600002b862c2211a0footer_script
1000    wp_admin_bar_render
9999999999  0000000072b7eb0b00002b862c208180

... и т.д. ...
*/

А так выглядит элемент массива в самой переменной $wp_filter:

global $wp_filter;

print_r( $wp_filter );

/*
	[wp_title] => WP_Hook Object
		(
			[callbacks] => Array
				(
					[10] => Array
						(
							[wptexturize] => Array
								(
									[function] => wptexturize
									[accepted_args] => 1
								)

							[convert_chars] => Array
								(
									[function] => convert_chars
									[accepted_args] => 1
								)

							[esc_html] => Array
								(
									[function] => esc_html
									[accepted_args] => 1
								)

						)

					[11] => Array
						(
							[capital_P_dangit] => Array
								(
									[function] => capital_P_dangit
									[accepted_args] => 1
								)

						)

				)

			[iterations:WP_Hook:private] => Array
				(
				)

			[current_priority:WP_Hook:private] => Array
				(
				)

			[nesting_level:WP_Hook:private] => 0
			[doing_action:WP_Hook:private] =>
		)

	[widget_title] => WP_Hook Object
		(
		............... и т.д.
*/

меню

Как получить функции прикрепленные к указанному хуку?

Часто бывает нужно посмотреть, какие функции прикреплены к отдельному фильтру или событию.

Код выше позволит это сделать, для этого нужно указать в нем параметр $hook_name:

hooks_list( 'the_title' );

/* Получим:

хук the_title
10  wptexturize
	convert_chars
	trim
	func_title_add_brackets
11  capital_P_dangit

*/

Другой вариант — это просто получить данные массива

Используем глобальную переменную $wp_filters. В ней хранятся данные всех хуков.

Данные в $wp_filters добавляются по ходу обработки кода, поэтому имеет большое значение когда используется переменная $wp_filters: например, если её использовать в начале файла темы functions.php, то в ней будут все функции хуков который были добавлены до подключения этого файла, но не будет добавленных в этом файле или позднее.

/**
 * Выводит список функций прикрепленных к указанному хуку
 * @param (str) $hook Название хука, функции которого нужно вывести.
 */
function print_filters_for( $hook ){
	global $wp_filter;

	$data = isset( $wp_filter[$hook] ) ? $wp_filter[$hook] : "Хук `$hook` не найден...";

	echo '<pre>', print_r( $data, 1 ) .'</pre>';
}

Теперь, чтобы вывести список всех функций/методов прикрепленных к фильтру или событию нужно вызвать эту функцию, и указать ей название хука.

Например, получим все функции добавленные к событию wp_footer. В индексе callbacks мы получим все функции прикрепленные к хуку, в порядке приоритета их вызова.

print_filters_for( 'wp_footer' );

/* Выведет:

WP_Hook Object (

	[callbacks] => Array (

		[0] => Array (
			[echo_ads_tpls] => Array (
				[function] => echo_ads_tpls
				[accepted_args] => 1
			)
		)

		[20] => Array (
			[wp_print_footer_scripts] => Array (
				[function] => wp_print_footer_scripts
				[accepted_args] => 1
			)
		)

		[99] => Array (
			[question_close_ajax_js] => Array (
				[function] => question_close_ajax_js
				[accepted_args] => 1
			)

			[add_question_rating_ajax_js] => Array (
				[function] => add_question_rating_ajax_js
				[accepted_args] => 1
			)
		)

		[1000] => Array (
			[wp_admin_bar_render] => Array (
				[function] => wp_admin_bar_render
				[accepted_args] => 1
			)
		)
	)

	[iterations:WP_Hook:private] => Array()
	[current_priority:WP_Hook:private] => Array()
	[nesting_level:WP_Hook:private] => 0
	[doing_action:WP_Hook:private] =>
)
*/

Быстрые и дешевые лайки на любые посты в Instagram можно приобрести на сайте Doctor SMM с гарантией на выполнение заказа. Только здесь Вы найдете ресурс на свой вкус! На сайте представлен широкий выбор формата лайков: русские, англоязычные, автолайки, тв-лайки, микс и пр. Делайте заказ сейчас и получайте выгодные оптовые скидки!

  • Прекрасного настроения как пишется
  • Прекратить или прекратить как пишется и почему
  • Прекословить или прикословить как пишется
  • Преклоняться перед талантом как пишется и почему
  • Преклонить стебель как пишется