Intereting Posts
Предварительный просмотр Image-Picker Customizer не работает Домашняя страница Pagination – Другие страницы не перенаправляются на шаблон главной страницы Полные текстовые статьи в RSS-ленте (т. Е. Без тега) Сохранение строки прерывается при сохранении и отображении данных настраиваемых полей 3 случайных изображения из пользовательского типа сообщения, каждый в div с разным классом Не удалось добавить ссылку «LoginLogout» с помощью логина входа в систему BAW Как проверить, какая кнопка отправки была нажата? Как заставить WP_Query 'post__in' принимать массив? Добавить контент в зависимости от загруженной страницы wpquery через ajax Как изменить пользовательский порядок сообщений ASC / DESC menu_order разумно динамически? Запуск функции при загрузке нового изображения в медиа-библиотеку Почтовый фильтр Ajax по таксономии Как использовать сообщения wp-запроса с текущим мета-значением в текстовом виджете Показывать заголовок, если не в iframe

Создать страницу с помощью wp_insert_post () и AJAX

Я пытался выяснить, как создать сообщение (или любой пользовательский тип сообщения) с помощью wp_insert_post() и AJAX … пока ничего не получилось.

Я надеюсь достичь:

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

Для начала я сделал очень простой плагин, вот PHP; который…

  1. ставит в очередь мой JS
  2. пытается (и, по-видимому, не удается) создать функцию для вставки сообщения с помощью wp_insert_post()
  3. имеет супер простой короткий код для отображения поля, используемого для создания сообщения / инициирования AJAX.

 /* Enqueue JS ----- */ function post_via_ajax_scripts() { wp_register_script( 'post-via-ajax-js', plugin_dir_url( __FILE__ ) . 'post_via_ajax.js', array( 'jquery' ), '', true ); wp_localize_script( 'post-via-ajax-js', 'pva_params', array( 'pva_ajax_url' => admin_url( 'admin-ajax.php' ) ) ); wp_enqueue_script( 'post-via-ajax-js' ); } add_action('wp_enqueue_scripts', 'post_via_ajax_scripts'); //Add Ajax Actions add_action('wp_post_via_ajax', 'post_via_ajax'); add_action('wp_post_via_ajax', 'post_via_ajax'); /* WP Insert Post Function ----- */ function post_via_ajax() { $query_post_via_ajax = $_POST; $post_title = ($query_post_via_ajax['post_title']) ? $query_post_via_ajax['post_title'] : false; // Create post object $new_pva_post = array( 'post_type' => 'page', 'post_title' => wp_strip_all_tags($post_title ), 'post_status' => 'publish', 'post_author' => 1, ); // Insert the post into the database wp_insert_post( $new_pva_post ); exit(); }; /* Form Shortcode ----- */ function post_via_ajax_shortcode( $atts, $content = null ) { return '<input id="post_title" name="post_title" type="text"><button id="create_post">Create Post</button>'; } add_shortcode( 'post_via_ajax', 'post_via_ajax_shortcode' ); 

И вот мой JS, который …

  1. имеет очень простую проверку, требующую, чтобы название было более 5 символов
  2. пытается (и не удается) создать сообщение через ajax и передать 'post_title' функции post_via_ajax()

 jQuery( document ).ready( function ( $ ) { $('#create_post').attr('disabled',true); $('#post_title').keyup(function(){ if($(this).val().length > 3) { $('#create_post').attr('disabled', false); $('#create_post').click(function(event){ post_via_ajax(); }); } else { $('#create_post').attr('disabled',true); } }); // Return Post Title Field Value function returnNewPostTitle(){ var newPostTitleValue = $('#post_title').val(); return newPostTitleValue; } // AJAX > Get City Posts function post_via_ajax() { console.log('woo'); var pva_ajax_url = pva_params.pva_ajax_url; //alert('woo');*/ $.ajax({ type: 'POST', url: pva_ajax_url, data: { action: 'post_via_ajax', post_title: returnNewPostTitle(), }, beforeSend: function () { console.log('sending'); }, success: function(data) { console.log('yay'); }, error: function() { console.log('nay'); } }) } }); 

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

Заранее спасибо!

Solutions Collecting From Web of "Создать страницу с помощью wp_insert_post () и AJAX"

Хорошо, поэтому после некоторого вождения у меня все работает.

Оказывается, я неправильно установил крючки add_action для части AJAX.

Крючки должны быть:

add_action( 'wp_ajax_nopriv_MYFUNCTION', 'MYFUNCTION' );

а также

add_action( 'wp_ajax_MYFUNCTION', 'MYFUNCTION' );

… в моем случае и в исходном коде функция («MYFUNCTION») заключалась в создании сообщения через wp_insert_post().

Итак, после очистки моих namin-соглашений и кода немного, у меня есть следующее:

PHP

 /** Plugin Name: Post via Ajax */ /* Enqueue JS ----- */ function pva_scripts() { wp_register_script( 'pva-js', plugin_dir_url( __FILE__ ) . 'pva.js', array( 'jquery' ), '', true ); wp_localize_script( 'pva-js', 'pva_params', array( 'pva_ajax_url' => admin_url( 'admin-ajax.php' ) ) ); wp_enqueue_script( 'pva-js' ); }; add_action('wp_enqueue_scripts', 'pva_scripts'); // creating Ajax call for WordPress add_action( 'wp_ajax_nopriv_pva_create', 'pva_create' ); add_action( 'wp_ajax_pva_create', 'pva_create' ); /* WP Insert Post Function ----- */ function pva_create() { $post_title = $_POST['post_title']; // Create post object $new_pva_post = array( 'post_type' => 'page', 'post_title' => $post_title, 'post_status' => 'publish', 'post_author' => 1, ); // Insert the post into the database wp_insert_post( $new_pva_post ); exit(); }; /* Form Shortcode ----- */ function pva_shortcode( $atts, $content = null ) { ob_start(); include(plugin_dir_path( __FILE__ ) . 'post_via_ajax_field.php'); $ret = ob_get_contents(); ob_end_clean(); return $ret; //pva(); }; add_shortcode( 'pva', 'pva_shortcode' ); 

JS


 jQuery( document ).ready( function ( $ ) { $('#create_post').attr('disabled',true); $('#post_title').keyup(function(){ if($(this).val().length > 3) { $('#create_post').attr('disabled', false); } else { $('#create_post').attr('disabled',true); } }); $('#create_post').click(function(event){ post_via_ajax(); }); // Return Post Title Field Value function returnNewPostTitle(){ var newPostTitleValue = $('#post_title').val(); return newPostTitleValue; } // AJAX > Get City Posts function post_via_ajax() { var pva_ajax_url = pva_params.pva_ajax_url; $.ajax({ type: 'POST', url: pva_ajax_url, data: { action: 'pva_create', post_title: returnNewPostTitle() }, beforeSend: function () { console.log('sending'); }, success: function(data) { console.log('yay'); }, error: function() { console.log('nay'); } }) } }); 

Итак, с этим в качестве плагина и с использованием короткого кода [pva] вы можете создать сообщение из front-end. Очевидно, что это было предназначено только для того, чтобы быть достаточно простым, поэтому я бы предположил, что вы можете адаптироваться / адаптироваться к вашим потребностям. Надеюсь, это поможет кому-то. 🙂

EDIT: Я также просто сделал супер базовый репозиторий GitHub с кодом.