फ़ील्ड को comment_form में कैसे पुनर्व्यवस्थित करें ()


22

खेतों को बदलने के लिए एक कस्टम फ़िल्टर का उपयोग कर Im, लेकिन टिप्पणी के रूप में फ़ील्ड के क्रम को बदलने के लिए कैसे पता लगा सकते हैं ।

वांछित आदेश:

  • टिप्पणी क्षेत्र (पहला / शीर्ष)
  • नाम
  • ईमेल
  • वेबसाइट

यह वह कोड है जो मैं वर्तमान में उपयोग कर रहा हूं:

function alter_comment_form_fields($fields){
    $fields['comments'] = 'Test';
    $fields['author'] = '<p class="comment-form-author">' . '<label for="author">' . __( 'Your name, please' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
                    '<input id="author" name="author" type="text" placeholder="John Smith" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>';
    $fields['email'] = 'next';  //removes email field
    //$fields['url'] = '';  //removes website field

    return $fields;
}

add_filter('comment_form_default_fields','alter_comment_form_fields');

जवाबों:


14

यह बहुत आसान है। आपको बस textareaडिफ़ॉल्ट फ़ील्ड्स से बाहर निकालना होगा - फ़िल्टर करें 'comment_form_defaults'और इसे कार्रवाई पर प्रिंट करें 'comment_form_top':

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Comment Textarea On Top
 * Description: Makes the textarea the first field of the comment form.
 * Version:     2012.04.30
 * License:     MIT
 * License URI: http://www.opensource.org/licenses/mit-license.php
 */

// We use just one function for both jobs.
add_filter( 'comment_form_defaults', 't5_move_textarea' );
add_action( 'comment_form_top', 't5_move_textarea' );

/**
 * Take the textarea code out of the default fields and print it on top.
 *
 * @param  array $input Default fields if called as filter
 * @return string|void
 */
function t5_move_textarea( $input = array () )
{
    static $textarea = '';

    if ( 'comment_form_defaults' === current_filter() )
    {
        // Copy the field to our internal variable …
        $textarea = $input['comment_field'];
        // … and remove it from the defaults array.
        $input['comment_field'] = '';
        return $input;
    }

    print apply_filters( 'comment_form_field_comment', $textarea );
}

अच्छा समाधान लेकिन क्या होगा यदि आप 3 या 4 फ़ील्ड के क्रम को बदलना चाहते हैं?
ब्रैड डाल्टन

1
@ ब्रैडल्टन वही: पहले सभी फ़ील्ड सामग्री को हटा दें, फिर उन्हें वांछित क्रम में प्रिंट करें comment_form_top
FUXIA

पता नहीं अगर कोड तब से बदल गया था, लेकिन 4.0 के लिए ऐसा लगता है comment_form_before_fieldsकि बेहतर हुक है तोcomment_form_top
मार्क कप्लून

@MarkKaplun आजकल मैं एक वर्ग के तर्क के रूप में वांछित स्थिति को पारित करूँगा। :)
FUXIA

4

मुझे जवाब देना पसंद था। हालाँकि मैं एक कस्टम टेक्सारिया का उपयोग करना चाहता था, इसलिए यह उस मामले में काम नहीं करता था। मैंने एक ही हुक का उपयोग किया लेकिन अलग-अलग कार्यों के साथ:

add_filter( 'comment_form_defaults', 'remove_textarea' );
add_action( 'comment_form_top', 'add_textarea' );

function remove_textarea($defaults)
{
    $defaults['comment_field'] = '';
    return $defaults;
}

function add_textarea()
{
    echo '<p class="comment-form-comment"><textarea id="comment" name="comment" cols="60" rows="6" placeholder="write your comment here..." aria-required="true"></textarea></p>';
}

ध्यान दें कि कई एंटी-स्पैम प्लग इन टेक्सटेरिया को भी बदल रहे हैं। यह बहुत अच्छा परीक्षण किया जाना है - मुझे एक समान दृष्टिकोण के साथ गंभीर समस्याएं थीं।
fuxia

4

इसे पूरा करने के कई तरीके हैं। उदाहरण के लिए, टिप्पणी फ़ील्ड को उस तरह से नीचे ले जाने के लिए जिसे आप इस तरह कोड का उपयोग करेंगे:

add_filter( 'comment_form_fields', 'move_comment_field' );
function move_comment_field( $fields ) {
    $comment_field = $fields['comment'];
    unset( $fields['comment'] );
    $fields['comment'] = $comment_field;
    return $fields;
}

यदि आप सभी क्षेत्रों को पुनर्व्यवस्थित करना चाहते हैं, तो सभी क्षेत्रों को परेशान करें। जिस क्रम में आप उन्हें प्रदर्शित करना चाहते हैं, उसे वापस सरणी में रखें। सरल सही?

मुझे लगा कि मैं इस पृष्ठ को खोजने के लिए और उत्तर उपयोगी नहीं खोजने के लिए मेरे जैसे अगले noobie के लिए इसे स्पष्ट रूप से वर्तनी दूँगा।


2

ऐसा करने के लिए सटीक सीएसएस, आपके विषय पर निर्भर करेगा, हालांकि, यहां एक तरीका है:

#commentform {
display:table;
width:100%;   
}

.comment-form-comment {
display: table-header-group; 
}

तालिका प्रदर्शन विधियाँ आपको मनमानी ऊंचाई की चीजों को पुनः व्यवस्थित करने देती हैं।

अधिक जानकारी: http://tanalin.com/en/articles/css-block-order/


1
महान विचार ओटो। फ्लेक्सबॉक्स का उपयोग करके एक समान दृष्टिकोण को पूरा किया जा सकता है: <br> #commentform { display: flex; flex-flow: column; } .comment-form-comment { order: -1; }
ब्रायन विलिस

1

$fieldsफ़ंक्शन में फ़ील्ड ओडी टिप्पणी फ़ॉर्म सरणी में हैं comment_form()। आप फ़िल्टर के अंदर हुक कर सकते हैं comment_form_default_fieldsऔर सरणी को पुन: व्यवस्थित कर सकते हैं ।

इसके अलावा आप फिल्टर के अंदर हुक कर सकते comment_form_defaultsहैं और चूक को बदल सकते हैं ; सरणी में सभी डेटा छोड़ दें और fieldअपने कस्टम फ़ील्ड के साथ केवल सरणी बदल दें ; HTML को शामिल करें।

डिफ़ॉल्ट यदि $ फ़ील्ड:

      $fields =  array(
          'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
                      '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
          'email'  => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) .
                      '<input id="email" name="email" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
          'url'    => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label>' .
                      '<input id="url" name="url" type="text" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>',
      );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.