• Добрый день, знатоки!
    Проблема следующая. Необходимо добавить в админку на страницу создания/редактирования записи свою собственную кнопку. Эта кнопка должна выполнять следующее: вставлять в таблицу wp_posts базы данных в дополнительно созданное поле некоторое текстовое значение — одно слово. Причем она должна вставлять в ячейку соответствующую строке, содержащей ID создаваемой/редактируемой записи.
    Кнопочку сделала. Дополнительное поле (будем называть его additional_1) тоже создала. Остается написать нехитрую функцию доваления в additional_1 значения, допустим, add_var.

    1. Добавлять можно через запрос «UPDATE wp_posts SET…». Но не уверена что это лаконичное и рациональное решение. Есть еще какие-нибудь другие более подходящие варианты, кроме запросов «в лоб»?
    2. Основная проблема, собственно, состоит в том что я не знаю как так написать запрос, чтобы значение add_var вставлялось соответственно определенному айди! Айди — автоинкремент, его значение берется где-то в коде. Если это оно — $post->ID — то я пыталась писать следующее:
    mysql_query(«UPDATE wp_posts SET additional_1 = ‘add_var’ WHERE post_content = «. $post->ID) or die(«Invalid query: » . mysql_error());
    Так не работает. Соответственно, я что-то не понимаю.
    Подскажите, пожалуйста, как проблему решить!

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    1. Можно использовать произвольные поля — они как раз для этого.
    2. С $post->ID логично сравнивать поле ID, а не post_content.

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

    Да, конечно, не верно сравнивать $post->ID с post_content. Вы правы, спасибо.

    Запрос я прописываю в функции. Скажите, пожалуйста, где в коде мне ее вызвать, чтобы совершилось ожидаемое чудо. Насколько я понимаю при нажатии кнопки «Опубликовать/Обновить» происходит перезагрузка страницы и принимаемые изменения с заносом исправлений в БД.

    За кнопку «Опубликовать/Обновить» отвечает код в wp-admin/includes/meta-boxes.php

    <?php
    if ( !in_array( $post->post_status, array('publish', 'future', 'private') ) || 0 == $post->ID ) {
    	if ( $can_publish ) :
    		if ( !empty($post->post_date_gmt) && time() < strtotime( $post->post_date_gmt . ' +0000' ) ) : ?>
    		<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Schedule') ?>" />
    		<input name="publish" type="submit" class="button-primary" id="publish" tabindex="5" accesskey="p" value="<?php esc_attr_e('Schedule') ?>" />
    <?php	else : ?>
    		<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Publish') ?>" />
    		<input name="publish" type="submit" class="button-primary" id="publish" tabindex="5" accesskey="p" value="<?php esc_attr_e('Publish') ?>" />
    <?php	endif;
    	else : ?>
    		<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Submit for Review') ?>" />
    		<input name="publish" type="submit" class="button-primary" id="publish" tabindex="5" accesskey="p" value="<?php esc_attr_e('Submit for Review') ?>" />
    <?php
    	endif;
    } else { ?>
    		<input name="original_publish" type="hidden" id="original_publish" value="<?php esc_attr_e('Update') ?>" />
    		<input name="save" type="submit" class="button-primary" id="publish" tabindex="5" accesskey="p" value="<?php esc_attr_e('Update') ?>" />
    
    <?php
    } ?>

    Не знаете, где находятся функции php, которые обрабатывают данные, посланные с помощью этой кнопки, чтобы я смогла там и свою функцию воткнуть?

    а еще лучше, наверно, проделать все выше описанное через Ajax. Чтоб обработка данных происходила без перезагрузки и «на лету» можно было бы записывать данные в БД… Но это все мечты.. Я с аяксом не особо дружу…

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Самостоятельно добавление записей в БД.» закрыта для новых ответов.