Опубликовать сообщение WordPress по запросу - PullRequest
0 голосов
/ 12 апреля 2020

Как я могу опубликовать сообщение на WordPress через запрос на публикацию без использования пользовательского интерфейса? Если возможно, я также хотел бы получить руководство о том, как я могу реализовать это с полями ACF.

1 Ответ

1 голос
/ 12 апреля 2020

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

Вы можете обрабатывать AJAX запросов с конкретный c действие и вызов wp_insert_post() для создания сообщений.

Пример, с которого можно начать:

add_action( 'wp_ajax_create_post', 'create_post_ajax_handler' );

/**
 * Handle the create post ajax request
 */
function create_post_ajax_handler() {
  // Get the post title from the ajax request
  // You can get whatever you have passed here
  // Also, perform any validations you might want
  $post_title = $_POST['post_title'];

  // Create the post
  $post_id = wp_insert_post( array(
    'post_title' => $post_title,
    'post_status' => 'publish'
    // you could also specify the 'post_type', 'meta_input' etc
  ), true );

  // Error handling
  if ( is_wp_error( $post_id ) ) {
    // Send error response
    wp_send_json_error( $post_id->get_error_message() );
  }

  // Send success response
  wp_send_json_success( $post_id );
}
add_action( 'wp_enqueue_scripts', 'enqueue_ajax_script' );

/**
 * Enqueue the ajax script
 */
function enqueue_ajax_script() {
  // Enqueue your JavaScript file with 'jquery' as a dependency
  wp_enqueue_script(
    'ajax-script',
    plugin_dir_url( __FILE__ ) . 'ajax-script.js',
    array( 'jquery' )
  );

  // Expose the url to admin-ajax.php as `ajax_object.ajaxurl`
  wp_localize_script(
    'ajax-script',
    'ajax_object',
    array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) )
  );
}
// Set the url as `ajax_object.ajaxurl` which is the url to admin-ajax.php
$.ajax(ajax_object.ajaxurl, {
  method: 'POST',
  data: {
    // Your action should match the name of your 'wp_ajax_{action}' hook
    action: 'create_post',
    // Pass any data you want
    post_title: 'Example post title'
  }
})
  .done((response) => {
    // Do whatever you want with the response (in this example, this would be the post id)
    console.log(response);
  })
  .fail((error) => {
    // Handle the errors
    console.error(error);
  });

Вы также можете посмотреть Одноразовые номера , которые помогают защитить от Подделки межсайтовых запросов (CSRF) .

Отказ от ответственности: Я не тестировал этот код, но я надеюсь, что вы поняли.


Редактировать: Поскольку вы упомянули, что используете Advanced Custom Поля:

$post_id = wp_insert_post( array(
  'post_title'  => $post_title,
  'post_status' => 'publish',
  // You can set ACF fields in the 'meta_input' array
  'meta_input'  => array(
    'acf_custom_field_name' => 'an example value'
  )
), true );

Редактировать # 2: Пожалуйста, прочитайте больше о AJAX в WordPress на Кодекс .

Ответ на ваш комментарий:

на какой URL я должен сделать запрос ajax, чтобы он срабатывал?

В Кодексе под AJAX в плагинах> Ajax на стороне, обращенной к зрителю

Вы также можете использовать wp_localize_script(), чтобы сделать URL-адрес доступным для вашего сценария, и сгенерировать его с помощью следующего выражения: admin_url( 'admin-ajax.php' )


как вставить действие "wp_ajax_create_post" в мой запрос на публикацию?

В Кодексе, AJAX в Плагинах> Ajax на стороне администрирования

Обратите внимание, как значение ключа 'action' 'my_action', определенное в нашем JavaScript выше, соответствует второй половине действия ' wp_ajax_my_action 'в нашем обработчике AJAX ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...