Intereting Posts
Custom-post-type-archive: сообщения отсортированы / отфильтрованы по году? Как пройти Выберите значение из Javascript в PHP, чтобы сгенерировать опцию выбора при изменении Есть ли способ установить роль пользователя на основе домена электронной почты Последняя версия javascript Child_of не отображает все сообщения для детей .. через get_posts Какой крюк я могу использовать для изменения пользовательских данных после того, как он будет отображаться на странице? Как настроить автоматические обновления в WordPress 3.7? Почему я получаю `вызов функции-члена has_posts () для не-объекта`? Сложный запрос WP SQL Как последовательно применять правило перезаписи при разработке плагинов Включить как стандартный, так и пользовательский тип публикации в запросе, измененном внутри pre_get_posts Использование расширенных пользовательских полей с помощью WordPress и Лайтбокс Почему моя база данных импортирует текстовые данные виджета? pre_get_posts фильтрует meta_query, не конфликтуя с существующим meta_query WP Rest API и json_decode ()

PHP: Как получить доступ к db в плагине?

Я думал, что найду ответ на свой вопрос в Интернете, но не смог. Это не большой вопрос, но поскольку это мой первый плагин, я хочу убедиться, что перед отправкой все правильно.

Что я делаю, это добавить ссылку на меню навигации в зависимости от значения, которое администратор выбирает с панели настроек на панели управления. Я обращаюсь к db в своем настраиваемом javascript, чтобы добавить данные в таблицы (в панели управления администратора), а затем извлечь эти данные в другой php-скрипт, используя фильтр «wp_nav_menu_items».

я использовал

wp_localize_script( 'my-ajax-request', 'accessDB', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); 

чтобы получить путь admin-ajax.php . Затем я отправляю свои призывы ajax к URL-адресу, указанному accessDB.ajaxurl . Эта часть работает нормально. И я думаю, что это правильный способ сделать ajax-звонки в плагине WordPress. Если нет, пожалуйста, поправьте меня.

Вторая часть – это то, где мне нужно получить значение из db. Это значение, которое мне нужно в wp_nav_menu_items фильтра wordpress wp_nav_menu_items . И так оно и есть:

 function add_custom_menu_link($items, $args) { global $wpdb; $row = $wpdb->get_row("SELECT * FROM " . $wpdb->prefix . "custom_table"); if (count($row) > 0) { return $items . "<li class='menu-item'><a href='" . $row->url . "' target='_blank'>Custom Link</li>"; } else { return $items; } } add_filter('wp_nav_menu_items', 'add_custom_menu_link', 10, 2); 

Поэтому мой вопрос в том, что я делаю это правильно, или мне нужно использовать cURL для получения данных с помощью admin-ajax.php ? Или есть другой способ, который мне не хватает?

С уважением

Solutions Collecting From Web of "PHP: Как получить доступ к db в плагине?"

Я не понимаю, работает ли это для вас или нет.

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

Для запроса ajax, если он создан в бэкэнд, вам не нужно передавать URL-адрес ajax, используя wp_localize_script . Из WP 2.8 глобальная переменная ajaxurl определена для использования в ajax-вызовах в области администрирования. Таким образом, вы можете удалить wp_localize_script и использовать непосредственно ajaxurl в javascript.

Вторая оптимизация в запросе db. Теперь он работает (или, по крайней мере, мне это нужно), но если вам нужен только переменная $row->url вы можете использовать $wpdb->get_var , например:

 $url = $wpdb->get_var("SELECT url FROM " . $wpdb->prefix . "custom_table"); if ( filter_var($url, FILTER_VALIDATE_URL) ) { return $items . "<li class='menu-item'><a href='" . esc_url($url) . "' target='_blank'>Custom Link</li>"; } else { return $items; } 

Что странно здесь, так это отсутствие предложения WHERE в вашем SQL. Кажется, вы сохраняете только одно значение в пользовательской таблице. Если это так, гораздо лучше использовать таблицу стандартных опций и использовать get_option / update_option чтобы получить и сохранить значения.