কমেন্ট_ফর্ম () তে ক্ষেত্রগুলি কীভাবে পুনরায় সাজানো যায়


22

আমি ক্ষেত্রগুলি পরিবর্তন করতে একটি কাস্টম ফিল্টার ব্যবহার করছি, তবে কীভাবে মন্তব্য আকারে ক্ষেত্রগুলির ক্রম পরিবর্তন করতে হবে তা বুঝতে পারছি না ।

পছন্দসই অর্ডার:

  • মন্তব্য ক্ষেত্র (প্রথম / শীর্ষ)
  • নাম
  • ই-মেইল
  • ওয়েবসাইট

এই কোডটি আমি বর্তমানে ব্যবহার করছি:

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
ফুক্সিয়া

এর পরে কোডটি পরিবর্তিত হয়েছে কিনা তা জানেন না তবে 4.0.০-এর জন্য মনে comment_form_before_fieldsহয় তবে আরও ভাল হুক হয়comment_form_top
মার্ক কাপলুন

@ মার্কক্যাপলুন আজকাল আমি একটি শ্রেণীর পক্ষে যুক্তি হিসাবে পছন্দসই অবস্থানটি পাস করব। :)
ফুসিয়া

4

আমি টসকো উত্তর পছন্দ করেছি। তবে আমি একটি কাস্টম টেক্সারিয়া ব্যবহার করতে চেয়েছিলাম, সুতরাং এটি সেই ক্ষেত্রে কার্যকর হয়নি work আমি একই হুক ব্যবহার করেছি তবে পৃথক ফাংশন সহ:

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>';
}

নোট করুন যে অনেকগুলি স্প্যাম বিরোধী প্লাগইনও টেক্সটরিয়াকে পরিবর্তন করছে। এটি খুব ভাল পরীক্ষা করতে হবে - একই ধরণের পদ্ধতির সাথে আমার মারাত্মক সমস্যা ছিল।
ফুসিয়া

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;
}

আপনি যদি সমস্ত ক্ষেত্র পুনরায় সাজাতে চান তবে সমস্ত ক্ষেত্র আনসেট করুন। আপনি যে ক্রমে প্রদর্শিত হতে চান সেগুলিতে সেগুলি আবার অ্যারেতে রাখুন। সহজ?

আমি অনুভব করেছি যে আমি এই জাতীয় পৃষ্ঠাটি খুঁজে পেতে এবং উত্তরগুলি কার্যকর না খুঁজে পেতে আমার মতো পরবর্তী নবী হিসাবে স্পষ্ট করে এটি বানান করব।


2

এটি করার জন্য সঠিক সিএসএস আপনার থিমের উপর নির্ভর করবে, তবে এখানে একটি উপায় রয়েছে:

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

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

সারণী প্রদর্শনের পদ্ধতিগুলি আপনাকে স্বেচ্ছাসেবী উচ্চতার জিনিসগুলিকে পুনঃক্রম করতে দেয়।

আরও তথ্য: http://tanalin.com/en/articles/css- block-order/


1
দুর্দান্ত ধারণা অটো। একটি অনুরূপ পদ্ধতির <br>: ব্যবহার flexbox সম্পন্ন করা যেতে পারে #commentform { display: flex; flex-flow: column; } .comment-form-comment { order: -1; }
ব্রায়ান উইলিস

1

ক্ষেত্রগুলি সম্পর্কে মন্তব্য ফর্মটি $fieldsফাংশনে অ্যারেতে রয়েছে comment_form()। আপনি ফিল্টার ভিতরে হুক comment_form_default_fieldsএবং অ্যারের পুনঃক্রম করতে পারেন ।

এছাড়াও আপনি ফিল্টার ভিতরে হুক comment_form_defaultsএবং ডিফল্ট পরিবর্তন করতে পারেন ; অ্যারের মধ্যে সমস্ত ডেটা ছেড়ে যান এবং fieldআপনার কাস্টম ক্ষেত্রগুলি দিয়ে অ্যারের কেবলমাত্র পরিবর্তন করুন ; এইচটিএমএল অন্তর্ভুক্ত।

ডিফল্ট যদি $ ক্ষেত্র:

      $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>',
      );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.