На самом деле пользовательского типа комментария нет, но вы можете легко и эффективно добавлять столбцы, используя "meta meta" , который представляет собой таблицу пар имя / значение, связанных с каждой парой имя / значение, с которой связан данный комментарий с использованием 'meta_key'
(пожалуйста, не добавляйте столбец в базу данных SQL; это не одобряется в сообществе разработчиков WordPress.)
Предположим, вы хотите, чтобы пользователь добавил свою учетную запись в Twitter. Это код, который сохранит мою учетную запись Twitter в комментарии, обозначенном $comment_ID
(добавление префикса имени мета-ключа к подчеркиванию является хорошей идеей для любой мета-метки, которую вы поддерживаете с помощью пользовательского кода, по сравнению с тем, что вы позволяете пользователям выбирать мета-ключ):
update_comment_meta($comment_ID,'_twitter','mikeschinkel');
Затем, чтобы загрузить значение для отображения в вашем шаблоне, вы просто вызываете get_comment_meta()
(третий параметр означает, что нужно вернуть одно значение, а не массив значений):
$twitter = get_comment_meta($comment_ID,'_twitter',true);
Конечно, не зная, как подключить WordPress для интеграции этого, вышеперечисленные функции не сильно помогут. Вам нужно использовать два крючка, первый из которых wp_insert_comment
, который будет вызван, когда WordPress сохранит комментарий:
add_action('wp_insert_comment','yoursite_wp_insert_comment',10,2);
function yoursite_wp_insert_comment($comment_ID,$commmentdata) {
$twitter = isset($_GET['twitter']) ? $_GET['twitter'] : false;
update_comment_meta($comment_ID,'_twitter',$twitter);
}
Второй немного сложнее; тот, который позволяет вам добавлять поля и изменять другие аспекты формы комментария. Хук 'comment_form_defaults'
устанавливает значения по умолчанию для комментария, и мы добавим HTML-код для поля Twitter (я зацепил формат HTML из функции comment_form()
, найденной в /wp-includes/comment-template.php
в строке 1511 в WP v3. 0,1)
add_filter('comment_form_defaults','yoursite_comment_form_defaults');
function yoursite_comment_form_defaults($defaults) {
$email = $defaults['fields']['email'];
$label = __( 'Twitter' );
$value = isset($_GET['twitter']) ? $_GET['twitter'] : false;
$defaults['fields']['twitter'] =<<<HTML
<p class="comment-form-twitter">
<label for="twitter">{$label}</label>
<input id="twitter" name="twitter" type="text" value="{$value}" size="30" />
</p>
HTML;
return $defaults;
}
А вот как это выглядит в действии:
Эта расширяемость формы комментариев является новой для WordPress 3.0, так что по своей природе она является новой в проекте с открытым исходным кодом, и, вероятно, она не будет охватывать все варианты использования (например, не было простого способа получить запоминается значение для имени в Twitter) , но, надеюсь, вы сможете согнуть его настолько, насколько сможете, и получите то, что вам нужно, и в будущем, выпущенном из WordPress, API формы комментариев почти наверняка улучшится.
Надеюсь, это поможет.
-Майк
P.S. В будущем рассмотрите возможность размещения вашего вопроса на родственном сайте StackOverflow Ответы WordPress ; вот где тусуются большинство энтузиастов WordPress, которые могут быстро ответить на такие вопросы.