Intereting Posts
Tax_Query с использованием WP_Query не работает Главная страница WordPress Организация пользовательских таксономий и пользовательских типов сообщений Ошибка выполнения has_posts () Динамически создавать дочерние URL-адреса для сообщений или настраиваемых сообщений Создать тему только для мобильных телефонов и планшетов? Есть ли простой способ сделать мета-окно, если вкладки, такие как метатекст категорий? получать типы сообщений и порядок плагинов Не удается найти Меню на панели управления как печатать общее количество сообщений, отфильтрованных по категориям? отключить виджеты по умолчанию в ответной теме Страница пользовательской регистрации – предотвратить перенаправление на wp-login.php? Action = register Закажите сумму нескольких числовых настраиваемых мета полей Как я могу сохранить кнопку «Предварительный просмотр» и сохранить предварительный просмотр в том же окне? Зачем использовать API настроек в новом меню администрирования?

Аутентификация по CURL

Я работаю над API для сайта WordPress. В принципе, внешнее приложение (не выполненное с использованием WP) может отправлять JSON в файл, который я сделал ( api.php ), и внутри этого файла я загружаю WP (используя wp-load.php ) и создаю сообщение (пользовательский тип сообщения ) на основе полученного JSON.

Когда я дойду до этого блока кода …

 $formation_fr = wp_insert_post( array( 'post_type' => 'formation', 'post_title' => 'example post', 'post_status' => 'publish', 'post_author' => 2 // This is an admin account associated with this ID ) ); 

… пост создается, и все работает, за исключением post_author (вместо этого для автора нет автора). Но мое внешнее приложение, отправив запрос CURL, получит следующее:

 Error: call to URL http://domain.com/api/api.php failed with status 500, response Alors, on triche ? , curl_error , curl_errno 0` 

«Алор, на трише?» Ошибка – это «Чейт»? ошибка на французском языке. WordPress почему-то думает, что я пытаюсь обойти возможности.

Если я попытаюсь войти в систему пользователя (ID: 2) программно с этим блоком кода …

 private function login( $id ) { $wp_account = get_user_by( 'id', $id ); $username = $wp_account->data->user_login; wp_set_current_user( $wp_account->ID ); wp_set_auth_cookie( $wp_account->ID ); do_action('wp_login', $username ); } 

… тогда я получаю это:

 Error: call to URL http://domain.com/api/api.php failed with status 500, response , curl_error , curl_errno 0 

Что в основном такая же ошибка, как и выше, но без «Cheatin»? Я не ожидал, что это сработает, потому что AFAIK cookie не повлияет на соединение CURL.

Итак, как я могу избежать ошибок в работе при работе над CURL? Я использовал wp_insert_post() много раз раньше и никогда не имел этой проблемы. Мое временное хакерское решение состоит в том, чтобы стереть wp_die() , которая, очевидно, устраняет проблему.

Версия WordPress – 3.9.1

Я сам выяснил ответ, и я отправлю его здесь, если у кого-нибудь еще есть эта проблема. В основном в WP 3.9.1, wp_insert_post() проверяет текущий зарегистрированный пользователь для возможностей учетной записи (по крайней мере, это то, что я предполагаю). Поскольку я подключался через cURL, пользователь не зарегистрировался, поэтому проверки возможностей не выполняются. Все, что мне нужно было сделать, это отправить cookie WP, чтобы запомнить зарегистрированные пользователи:

 $curl = curl_init( 'http://www.domain.com' ); $login_cookie = 'wordpress_logged_in_[hash]=xxx'; // This cookie can be found once a user is logged in. curl_setopt( $curl, CURLOPT_COOKIE, $login_cookie ); 

Поэтому я просто создал новую учетную запись администратора для моего внешнего приложения, зарегистрировал ее как эту учетную запись (используя / wp-admin), скопировал файл cookie, который сделал для меня WP, и добавил его в мое приложение.