Dmitry Kohan
Ответы в темах
-
понял, @yube , спасибо, значит при деактивации темы с кастомными записями и таксономиями ничего делать не нужно. А вот по поводу терминов, Вы писали:
Однако, записи, термы и реляции хранятся в базе, а потому существуют даже тогда, когда самого движка нет в царстве живых (нет обращений к сайту).
Я пытаюсь добавить новые термины кастомной таксономии при помощи
wp_insert_term()
после активации темы (after_switch_theme()
), а при деактивации темы удалять эти термины во времяswitch_theme()
. Но ничего не выходит, и ошибки не появляются при активации/деактивации темы. Подскажите, пожалуйста, где я ошибся, во время какого события правильно будет вставлять/удалять термины ?@yube , подскажите ещё, пожалуйста, если я регистрирую свои записи и таксономии во время события
init
в functions.php темы, нужно ли отменять регистрацию этих записей и таксономий —unregister_post_type()
иunregister_taxonomy()
— при деактивации темы ?@yube , подскажите, пожалуйста, нигде не могу найти ответ — первоначально нужно регистрировать свой тип записи при помощи
register_post_type()
, а только затем таксономии при помощиregister_taxonomy()
, которые будут привязаны к данному типу записи или же наоборот — первоначально нужно регистрировать таксономии, а только затем тип записи, к которому данные таксономии будут прикреплены ?@yube , еще раз прошу прощения за беспокойство, по поводу верстки для меню в виджете Вы писали:
Как везде — через css.
Я видимо не могу уловить самого главного — я создаю меню в админке, привязываю его к виджету, но как мне узнать css-классы генерируемого меню ? как узнать css-класс виджета поиска? через консоль браузера http://prntscr.com/uawnrl?
т.е. получаетсяwp_nav_menu()
позволяет добавить к меню свои классы и идентификаторы, чтобы сверстать как тебе нужно, а правильнее и проще будет переопределять стили для классов и идентификаторов, которые WP генерирует сам. Я правильно Вас понял ?Понял, спасибо!! @yube , Вы писали:
Среди штатных виджетов есть виджет «навигационное меню», в котором можно вывести любое из имеющихся (созданных) меню.
А как в данном случае задать свою верстку для меню в виджете, как применить wp_nav_menu() ? для виджетов наверное есть отдельный механизм (виджету «Поиск» также нужно задать свою верстку). Не подскажете как действовать в данном случае ?
@yube , я прошу прощения, Вы не подскажете, могу ли я меню, созданное в wp_nav_menu(), разместить в сайдбаре, в котором имеется один или несколько виджетов ? или отдельно создается меню и отдельно под ним виджеты в сайдбаре? не могу сообразить… (извиняюсь, если вопрос показался странным — на сайте без CMS данный блок с меню и записями оформлен цельным блоком и присутствует на всех страницах: http://prntscr.com/uasm0j. Как правильнее его реализовать в концепции WP ? )
Может я чего-то не понимаю… вот мой неактивированный плагин: http://prntscr.com/u6sopm, а вот форма, которую я прописал в файле плагина: http://prntscr.com/u6srg8
@yube , я прошу прощения, описанный выше функционал импорта данных из файлов CSV в базу данных пытаюсь добавить при помощи функции add_menu_page() следующим образом:
add_action( 'admin_menu', 'register_import_csv' ); function register_import_csv(){ add_menu_page( 'Импорт из CSV', 'Импорт из CSV', 'manage_options', 'import_csv/import_csv.php', '', 'dashicons-database-import', 81 ); }
Код страницы расположен в файле плагина import_csv.php . То что я прописал в файле отображается и без активации плагина.
Подскажите, пожалуйста, сам плагин при этом получается не нужно активировать ?@yube , еще раз спасибо. Создаю структуру будущего каталога и закралась мысль о будущем наполнении таблиц wp_posts, wp_postmeta, wp_term, wp_termmeta данными о товарах, организациях и т.п. Думаю не комильфо заполнять 2500 товаров и 1000 организаций ручками, если имеется готовый массив данных в Excel и его можно перевести в формат CSV. Вопрос в том, как реализовать данный алгоритм для WP. Ранее, когда я учился и писал сайты на php без CMS, я через форму брал файл, проверял его формат, и если все ОК — читал строки из файла при помощи
fgetcsv()
и полученный массив записывал в БД. Подскажите, пожалуйста, можно ли что-то подобное реализовать в админке WP ? — Т.е. добавить новую вкладку или нечто подобное (еще не приходилось добавлять какой-либо функционал в админку WP), а в ней создать форму c<input type='file' />
, а далее обрабатывать файл при помощи все той жеfgetcsv()
и полученные данные записывать в БД при помощиwp_insert_post(), wp_insert_term(), update_post_meta(), update_term_meta()
. Подскажите, пожалуйста, будет ли работать данный алгоритм в админке WP, и как в принципе, если можно, добавить данный функционал в админку ?
Ниже, вряд ли конечно пригодится, но привожу фрагмент своего кода, которым я обрабатывал файлы CSV и записывал данные из них в БД:<?php if (isset($_POST['submit']) && $import=='bel') { if ($_FILES) { $name = $_FILES['filename']['name']; if ($_FILES['filename']['type']=='application/vnd.ms-excel') { move_uploaded_file($_FILES['filename']['tmp_name'], $name); echo "<h4 class='available'>FILE is LOADED: '$name'</h4>"; $type='application/vnd.ms-excel'; } else { echo "<h4 class='taken'>FILE has not correct format or not exists</h4>"; exit(); } } else echo "<h4 class='taken'>Loading did NOT happen</h4>"; if ((file_exists("$name")) && ($type)) { echo "<h4 class='available'>OK - FILE has correct format</h4>"; $rowsCount = 100; $insertStmt = 'Insert into statistics_rb (parameter,parameter_unit,id_2010,id_2011,id_2012,id_2013,id_2014,id_2015,id_2016,id_2017,id_2018) values '; $row = 1; if (($handle = fopen("$name", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); $row++; if ($row > 2) { $data_final = array_map('htmlentities', $data); $rowsToInsert[] = '("' . implode('","', $data_final) . '")'; if ($rowsCount <= count($rowsToInsert)) { $insertStmt_final = $insertStmt . implode(', ', $rowsToInsert); $result=$conn->query($insertStmt_final); $rowsToInsert = array(); } } } if (!empty($rowsToInsert)) { $insertStmt_final = $insertStmt . implode(', ', $rowsToInsert); $result=$conn->query($insertStmt_final); $rowsToInsert = array(); } fclose($handle); } } }
Понял, спасибо большое за совет. @yube , позвольте также спросить — есть ли какое-то ограничение по количеству на создание своих типов записей и таксономий к ним ? В моем случае, кроме Товаров, некоторым Организациям будут принадлежать также некоторые Вакансии и Услуги, которые они предлагают (ну и мало ли появится что-то еще))) т.к. товары, вакансии и услуги являются разными сущностями, я ведь могу для удобства выборок создать отдельными типами записей и Товары, и Вакансии, и Услуги и соответственно к каждому типу записи создать свои таксономии (где-то общие для всех, а где-то индивидуальные для каждого типа записи) ?
@yube , можно ещё попросить Ваш совет по поводу таксономий — производители и поставщики. Выше Вы писали:
Это обусловлено способом хранения данных в БД. То есть, товары — записи, производители и поставщики — таксономии.
В моем случае у 80% товаров (всего в БД около 2500 товаров, их количество расти не будет) известны только поставщики, в остальных 20% случаях производитель одновременно является поставщиком (всего в справочнике около 1000 уникальных организаций). Подскажите, пожалуйста, лучше Производители и Поставщики оформлять как отдельные таксономии и ничего страшного что эти 20% организаций будут дублироваться в термах двух созданных таксономий, или же лучше делать одну таксономию «Организации» и далее определять по мета-полю каждой термы в wp_termmeta является организация поставщиком или производителем или и тем и тем одновременно ?
Понял, @yube , еще раз спасибо) буду в указанном Вами ключе продумывать структуру записей и таксономий. Можно ещё вопрос: теоретически я могу в wp_postmeta прописывать несколько цен товара, а идентифицировать каждую цену отдельного продавца по meta_key, где meta_key будет слагом соответствующей термы продавца? Ну и соответственно meta_value будет ценой данного продавца, по слагу в meta_key таким образом определю продавца, или такой подход в корне неправильный и цену по meta_key таким образом не удастся идентифицировать с продавцом?
@yube , спасибо огромное!) Получается один товар (т.е. одна запись из wp_posts) может быть связан с энным количеством записей из wp_terms (т.е. с продавцами). Но вопрос по поводу цены товара — цена товара устанавливается продавцом, а один товар могут продавать несколько продавцов и каждый продавец по своей цене, не пойму как в wp_postmeta задать несколько цен одному товару и привязать каждую цену к определенному продавцу?
@yube , спасибо Вам огромное за помощь и терпение ! Буду дальше разбираться, а вопрос данной темы решен в более чем полном объеме, не только касательно хранения данных в wp_posts и wp_postmeta, но и их извлечения, дальнейшей обработки и даже экспорта. Содержание данной темы буду использовать как инструкцию.
@yube , ещё раз огромное Вам спасибо за ответы и помощь !@yube , в любом случае спасибо огромное, буду разбираться