Поддержка Плагины Как узнать ID поста во время создания/редактирования ?

  • Решено Oleksandr Myronchuk

    (@mironchuk-alexander)


    Когда создается новый пост или когда он редактируется, пользователь сможет воспользоваться моей кнопкой в TinyMCE. Эта кнопка вызовет окно в котором нужно будет ввести некоторую информацию.
    После того как пользователь заполнит все поля и нажмет «ОК» я хочу отправить эту информацию в базу данных. Для этого я создал ajax запрос. Но как мне узнать ID текущего поста ?

    JS Отправляю запрос

    
    dateEvents = document.getElementById('dateEvents').value;
    ...
    function save_events()
    {
        var xhttp = new XMLHttpRequest();
        function ajaxAnswer() {
            if (this.readyState == 4 && this.status == 200) {
                if(this.responseText != 0)
                {
                    //Error
                }
            }
        }
        xhttp.onreadystatechange = ajaxAnswer;
        xhttp.open('POST', window.location.protocol + '//' + window.location.hostname + '/wp-admin/admin-ajax.php', true);
        xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        xhttp.send('action=saveEvents&dateEvents=' + dateEvents);
    }

    PHP Принимаю запрос

    
    add_action('wp_ajax_saveEvents', 'saveEvents');
    add_action('wp_ajax_nopriv_saveEvents', 'saveEvents');
    ...
    function saveEvents()
    {
        if(!$wpdb->insert( 
    	'wp_events', 
    	array( 
    		'post_id' => Что здесь писать ? !!!!!!!!!!!!!!!!!!!!!!!!!!, 
    		'dateEvents' => $_POST['dateEvents'] 
    	), 
    	array( 
    		'%d', 
    		'%s' 
    	) 
        ))
        {return 0}else{return -1}
        wp_die();
    }

    Как узнать ID поста во время создания/редактирования ?

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • После того как пользователь заполнит все поля и нажмет «ОК» я хочу отправить эту информацию в базу данных.

    После нажатия кнопки в TinyMCE и обработки данных из «некого окна» — нужно хотеть вставить результат в тело поста. Для этого не нужно знать ID поста, которого, собсно, может не быть. Он появится только после сохранения (авто в тч).

    Если же у Вас какая-то другая задача/задумка, то стоит спросить «как реализовать».

    • Ответ изменён 5 лет, 4 месяца назад пользователем SeVlad.
    Автор Oleksandr Myronchuk

    (@mironchuk-alexander)

    Я хочу сделать плагин для анонсов событий. В тело поста я вставляю сам «анонс» (некоторую информацию). А дату я хочу сохранить в базу данных чтобы потом по ней сортировать анонсы. То есть у меня есть дев дать
    1 — дата поста, которую я не трогаю (WP)
    2 — дата анонса, которую я хочу сохранить в базу данных (вводит пользователь)

    таблица (что я создал)
    wp_events
    -id (primary key)
    -post_id
    -dateEvents

    я сделал код по другому

    add_action('save_post', 'saveEvents');
    
    function saveEvents( $post_id )
    {
        $postDate = ? но как мне теперь получить дату ?!!!!!!!!!!!!;
           
        $wpdb->insert( 
    	'wp_events', 
    	array( 
    		'post_id' => $post_id, 
    		'dateEvents' => $postDate
    	), 
    	array( 
    		'%d', 
    		'%s' 
    	) 
        )
    }

    но как мне теперь получить дату ?

    script.html — файл который содержит окно для ввода информации

    ...
    <input type="date" name="date_of_events" id="date_of_events" required/>
    ...

    script.js — добавление кнопки в TinyMCE

    (function () {
    	tinymce.PluginManager.add( 'events', function( editor, url ) 
    	    {
    		// Add Button to Visual Editor Toolbar
    		editor.addButton('events', {
    			title: 'New event',
    			cmd: 'events',
                image: url + '/image/note.png',                        
    		});
                    // Add Command when Button Clicked
                    editor.addCommand('events', function() 
                    {
                        editor.windowManager.open({
                            title: 'Event',
                            url: url + '/script.html',
                            width: 600,
                            height: 600
                            });
                    });
    	});
    })();
    • Ответ изменён 5 лет, 4 месяца назад пользователем Oleksandr Myronchuk.

    Я хочу сделать плагин для анонсов событий. В тело поста я вставляю сам «анонс» (некоторую информацию). А дату я хочу сохранить в базу данных чтобы потом по ней сортировать анонсы.

    Ну так причём тут редактор и кнопки в нём?
    Произвольные поля и всех делов.

    таблица (что я создал)

    Рекомендую обратить вминание на ответы коллег:
    https://ru.wordpress.org/support/topic/%d0%ba%d0%b0%d0%ba-%d0%bd%d0%be%d0%b2%d1%8b%d0%b5-%d1%82%d0%b8%d0%bf%d1%8b-%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d0%b5%d0%b9-%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d1%8f%d1%82%d1%8c-%d0%b2-%d0%bd%d0%be%d0%b2/

    • Ответ изменён 5 лет, 4 месяца назад пользователем SeVlad.
    Автор Oleksandr Myronchuk

    (@mironchuk-alexander)

    Спасибо, да такой вариант подходит.
    У меня есть еще один вопрос.
    Я хочу как-то разъединить написания обычных постов и постов анонсов (потому что мне нужно сделать некоторые поля обязательны для заполнения). Для этого я хочу создать отдельную страницу.

    Я создал меню, и когда пользователь перейдет по этому меню, я хочу отобразить страницу создания поста с моими полями, но не знаю как это сделать.

    define('concerts_URL', plugins_url(plugin_basename(dirname(__FILE__))));
    
    add_action('admin_menu', 'eventsMenu');
    
    function eventsMenu()
    {
        add_menu_page( 
        'New event', 
        'New event', 
        'manage_options', 
        'events-add-new',
        'events_add_new',
        concerts_URL.'/image/events.png'
        );
    }
    
    function events_add_new()
    {
        Что здесь нужно написать чтобы вывести страницу создания нового поста с произвольными полями ??
    }

    Так я добавлял новые поля.

    add_action('add_meta_boxes', 'events_extra_fields', 1);
    
    function events_extra_fields() {
    	add_meta_box( 'extra_fields', 'Event', 'events_extra_fields_box_func', 'post', 'normal', 'high');
    }
    
    function events_extra_fields_box_func( $post ){
    ...здесь мои поля...
    }
    
    add_action('save_post', 'events_saveEvent');
    
    function events_saveEvent()
    {
    ...сохраняю поля...
    }

    У меня есть еще один вопрос.

    Правила форума, п2.
    Создайте другой топик, поясните что значит «анонсы», для чего и тд.

    Автор Oleksandr Myronchuk

    (@mironchuk-alexander)

    Извините, я не хотел нарушать правила форму.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Как узнать ID поста во время создания/редактирования ?» закрыта для новых ответов.