Làm thế nào để ẩn filed đối với thành viên hoặc không cho thành viên có quyền đc chỉnh sửa,

Discussion in 'Hỏi Đáp Kỹ Thuật' started by Sanhpv, Mar 8, 2020.

  1. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    Mọi người cho mình hỏi muốn ẩn filed đối với thành viên thì làm kiểu gì , hoặc không cho thành viên có quyền chỉnh sửa riêng đối với cái field đó , trong plugin post expirator không có chế độ chỉ có admin mới chỉnh sửa đc , thành viên cũng tự sửa đc , lên mình muốn nó ẩn đi với thành viên chỉ hiện lên với mình thôi có cách nào không mọi người
    [​IMG]
     
  2. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Cái nầy chắc phải edit trong code, Cậu biết đọc code php k?
     
  3. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    a chỉ cho e edit code ở phần nào , sửa thành như thế nào là e edit đc a
     
  4. wpresources

    wpresources Bang Chúng

    Cái này thì chỉ có ai dùng mới biết thôi bạn.Để tìm thì có thể áp dụng cách đơn giản sau.
    1.Bạn mở tất cả file có trong plugin trong trình soạn thảo ví dụ notepadd++
    2.Nhần ctr+f để tìm từ cần tìm lần lượt cho từng file.Của bạn có nên tìm từ 'Enable Post Expiration';

    (Để dễ dàng hơn thì bạn có thể mở plugin đó trong netbean,để có thể dàng quan sát khúc đó nó gọi hàm,gọi câu lệnh nào...)
     
  5. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    đây là 2 đoạn code có chứa enable post expiration , mong a sửa giúp e với
    Code:
    add_action( 'quick_edit_custom_box', 'display_expirationdate_quickedit', 10, 2 );
    function display_expirationdate_quickedit( $column_name, $post_type ) {
        if ($column_name != 'expirationdate') return;
            ?>
        <div style="clear:both"></div>
        <fieldset class="inline-edit-col-left post-expirator-quickedit">
            <div class="inline-edit-col">
            <div class="inline-edit-group">
            <span class="title">Post Expirator</span>
                <p><input name="enable-expirationdate" type="checkbox" /><span class="title">Enable Post Expiration</span></p>
                <fieldset class="inline-edit-date">
                    <legend><span class="title">Expires</span></legend>
                    <div class="timestamp-wrap">
                        <label><span class="screen-reader-text">Month</span>
                        <select name="expirationdate_month">
                        <option value="01" data-text="Jan">01-Jan</option>
                        <option value="02" data-text="Feb">02-Feb</option>
                        <option value="03" data-text="Mar">03-Mar</option>
                        <option value="04" data-text="Apr">04-Apr</option>
                        <option value="05" data-text="May">05-May</option>
                        <option value="06" data-text="Jun">06-Jun</option>
                        <option value="07" data-text="Jul">07-Jul</option>
                        <option value="08" data-text="Aug">08-Aug</option>
                        <option value="09" data-text="Sep">09-Sep</option>
                        <option value="10" data-text="Oct">10-Oct</option>
                        <option value="11" data-text="Nov">11-Nov</option>
                        <option value="12" data-text="Dec">12-Dec</option>
                        </select>
                        </label>
                        <label><span class="screen-reader-text">Day</span>
                    <input name="expirationdate_day" value="" size="2" maxlength="2" autocomplete="off" type="text"></label>,
                    <label><span class="screen-reader-text">Year</span>
                    <input name="expirationdate_year" value="" size="4" maxlength="4" autocomplete="off" type="text"></label> @
                    <label><span class="screen-reader-text">Hour</span>
                    <input name="expirationdate_hour" value="" size="2" maxlength="2" autocomplete="off" type="text"></label>:
                    <label><span class="screen-reader-text">Minute</span>
                    <input name="expirationdate_minute" value="" size="2" maxlength="2" autocomplete="off" type="text"></label></div>
                    <input name="expirationdate_quickedit" value="true" type="hidden"/>
                </fieldset>
            </div>
            </div>
        </fieldset>
    <?php
    
    }
    
    Code:
        $rv = array();
        $rv[] = '<p><input type="checkbox" name="enable-expirationdate" id="enable-expirationdate" value="checked"'.$enabled.' onclick="expirationdate_ajax_add_meta(\'enable-expirationdate\')" />';
        $rv[] = '<label for="enable-expirationdate">'.__('Enable Post Expiration','post-expirator').'</label></p>';
    
        if ($default == 'publish') {
            $rv[] = '<em>'.__('The published date/time will be used as the expiration value','post-expirator').'</em><br/>';
        } else {
            $rv[] = '<table><tr>';
            $rv[] = '<th style="text-align: left;">'.__('Year','post-expirator').'</th>';
            $rv[] = '<th style="text-align: left;">'.__('Month','post-expirator').'</th>';
            $rv[] = '<th style="text-align: left;">'.__('Day','post-expirator').'</th>';
            $rv[] = '</tr><tr>';
            $rv[] = '<td>';
            $rv[] = '<select name="expirationdate_year" id="expirationdate_year"'.$disabled.'>';
            $currentyear = date('Y');
    
            if ($defaultyear < $currentyear) $currentyear = $defaultyear;
    
            for($i = $currentyear; $i < $currentyear + 8; $i++) {
                if ($i == $defaultyear)
                    $selected = ' selected="selected"';
                else
                    $selected = '';
                $rv[] = '<option'.$selected.'>'.($i).'</option>';
            }
            $rv[] = '</select>';
            $rv[] = '</td><td>';
            $rv[] = '<select name="expirationdate_month" id="expirationdate_month"'.$disabled.'>';
    
            for($i = 1; $i <= 12; $i++) {
                if ($defaultmonth == date_i18n('m',mktime(0, 0, 0, $i, 1, date_i18n('Y'))))
                    $selected = ' selected="selected"';
                else
                    $selected = '';
                $rv[] = '<option value="'.date_i18n('m',mktime(0, 0, 0, $i, 1, date_i18n('Y'))).'"'.$selected.'>'.date_i18n('F',mktime(0, 0, 0, $i, 1, date_i18n('Y'))).'</option>';
            }
    
            $rv[] = '</select>';
            $rv[] = '</td><td>';
            $rv[] = '<input type="text" id="expirationdate_day" name="expirationdate_day" value="'.$defaultday.'" size="2"'.$disabled.' />,';
            $rv[] = '</td></tr><tr>';
            $rv[] = '<th style="text-align: left;"></th>';
            $rv[] = '<th style="text-align: left;">'.__('Hour','post-expirator').'('.date_i18n('T',mktime(0, 0, 0, $i, 1, date_i18n('Y'))).')</th>';
            $rv[] = '<th style="text-align: left;">'.__('Minute','post-expirator').'</th>';
            $rv[] = '</tr><tr>';
            $rv[] = '<td>@</td><td>';
             $rv[] = '<select name="expirationdate_hour" id="expirationdate_hour"'.$disabled.'>';
    
     
  6. wpresources

    wpresources Bang Chúng

    Bạn viết lệnh kiểu select * from user where userRole='admin' kiểu kiểu vậy.Nếu đúng thì hiển thị đoạn lệnh trên.Mình không không dành wordpress,php chỉ gợi ý bạn thế thôi
     
  7. Dang

    Dang Bang Chúng

    Nếu bạn dùng plugin Post Expirator của Aaron Axelsen (bản mới nhất) thì cách dễ nhất là :
    - Open file post-expirator.php .
    - Thêm đoạn if (isset($_POST['enable-expirationdate']) && !is_admin()) return; ngay sau thẻ mở của hàm expirationdate_update_post_meta

    p/s : Cách trên sẽ không lưu các thông tin expirationdate nếu không phải admin nhưng vẫn hiển thị đối với thành viên. Mình chưa test thử lỗi logic như thế nào, nhưng cách nhanh nhất là như vậy, bạn thử xem sao nhé :) !
     
    Last edited: Mar 10, 2020
  8. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    em đã thêm thẻ trên mà thành viên vẫn tích đc ,
     
    Last edited: Mar 10, 2020
  9. Dang

    Dang Bang Chúng

    Ở trên mình có nói là nó vẫn hiển thị đối với thành viên, nhưng sẽ không lưu thông tin expirationdate nếu thành viên có nhập thông tin đó rồi mà!
    Có lẽ bạn cập nhật không đúng ở đâu rồi! Chứ đoạn trên chỉ được thực hiện nếu thành viên / admin nhấn "Save" thôi, vậy thì link tạo bài viết vẫn được hiển thị bình thường chứ!
     
  10. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    thành viên vẫn tích đc vào Enable Post Expiration , và chỉnh sửa đc ngày tháng năm thành viên vẫn tự lưu lại đc
    còn đây là đoạn code e đã chèn đoạn mã của a , a xem đúng chưa
    Code:
    add_action('save_post','expirationdate_update_post_meta');
    if (isset($_POST['enable-expirationdate']) && !is_admin()) return;
    function expirationdate_update_post_meta($id) {
    // don't run the echo if this is an auto save
        if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
            return;
    
        // don't run the echo if the function is called for saving revision.
            $posttype = get_post_type($id);
        if ( $posttype == 'revision' )
            return;
    
        if (!isset($_POST['expirationdate_quickedit'])) {
            if (!isset($_POST['expirationdate_formcheck']))
                return;
        }
    
        if (isset($_POST['enable-expirationdate'])) {
                $default = get_option('expirationdateDefaultDate',POSTEXPIRATOR_EXPIREDEFAULT);
            if ($default == 'publish') {
                    $month      = intval($_POST['mm']);
                       $day      = intval($_POST['jj']);
                    $year      = intval($_POST['aa']);
                    $hour      = intval($_POST['hh']);
                    $minute  = intval($_POST['mn']);
            } else {
                    $month     = intval($_POST['expirationdate_month']);
                       $day      = intval($_POST['expirationdate_day']);
                    $year      = intval($_POST['expirationdate_year']);
                       $hour      = intval($_POST['expirationdate_hour']);
                    $minute  = intval($_POST['expirationdate_minute']);
            }
            $category = isset($_POST['expirationdate_category']) ? $_POST['expirationdate_category'] : 0;
    
            $ts = get_gmt_from_date("$year-$month-$day $hour:$minute:0",'U');
    
            if (isset($_POST['expirationdate_quickedit'])) {
                    $ed = get_post_meta($id,'_expiration-date',true);
                        if ($ed) {
                            $opts = get_post_meta($id, '_expiration-date-options', true);
                        }
            } else {
                $opts = array();
     
  11. Dang

    Dang Bang Chúng

    Bạn chèn sai rồi!
    PHP:
    <?php
    add_action
    ('save_post','expirationdate_update_post_meta');
    function 
    expirationdate_update_post_meta($id) {
    if (isset(
    $_POST['enable-expirationdate']) && !is_admin()) return;
    // ...
    ?>
     
  12. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    em có chèn cả bên dưới đó rôif ae , e chèn cả 2 chỗ đấy đều không đc e ms dám hỏi a mà
     
  13. Dang

    Dang Bang Chúng

    Bạn đính kèm file post-expirator.php lên đi!
     
  14. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    Attached Files:

  15. Dang

    Dang Bang Chúng

    Attached Files:

  16. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    vẫn k đc a ạ thành viên vẫn đổi bình thường :((((((((((
     
  17. Dang

    Dang Bang Chúng

    Ok bạn! Để mình install và test thử xem sao!
     
  18. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    vâng cảm ơn a đã nhiệt tình giúp e
     
  19. Dang

    Dang Bang Chúng

    :( lỗi do dùng hàm is_admin không đúng. Mình update lại dòng 264 và 511, đã test thành công. Bạn kiểm tra lại thử nhé!
     

    Attached Files:

  20. Sanhpv

    Sanhpv Sơ Nhập Giang Hồ

    a cho e phiền cái nữa là , là ở bên ngoài phần sửa nhanh bài viết , nó vẫn hiện phần tích Enable Post Expirator . khi thành viên bỏ tích và cập nhật vẫn đc , em muốn chỉ Admin mới đc tích hoặc bỏ tích , thành viên thì k đc , mong a giúp nốt
    [​IMG]