Отображение пользовательской меты в WordPress Quick Edit - PullRequest
0 голосов
/ 01 мая 2020

У меня есть веб-сайт WordPress, который демонстрирует несколько команд, используя пользовательский тип сообщения, где члены команды появляются в более чем одной команде. Я использую плагин, который позволяет мне устанавливать индивидуальный порядок для каждого отдельного члена команды для каждой отдельной команды, но это становится проблемой, когда приходится редактировать порядок каждого участника в своем посте. Я хочу включить настраиваемые метатекстовые поля, которые обрабатывают заказы членов при быстром редактировании. Плагин уже позволяет вам устанавливать пользовательский заказ посредством быстрого редактирования по умолчанию, но это касается только одной команды.

Проблема:

  • У меня есть член команды по имени Джон Доу, который является как частью команды руководителей, так и частью команды бухгалтеров.
  • Он должен быть указан как 1-й в бухгалтерии, потому что он является руководителем этого отдела
  • Однако для руководящей команды Джон Доу должен выглядеть как 3-й
  • Установка по умолчанию номера пользовательского заказа на 1 или 3 приведет к тому, что он не будет корректно отображаться в одной из команд. 1, в результате чего он появляется как 1-й в команде лидеров, или 3, в результате чего он появляется 3-м в команде бухгалтеров. Просто нельзя полагаться на один номер заказа здесь.
  • К счастью, плагин имеет возможность использовать собственные метасы, которые вы можете добавлять к каждой отдельной команде для членов команды индивидуального заказа
  • У меня есть лидерство команда, использующая мету Джона Доу «MTS Order Leadership» = 3 и другую пользовательскую мету «MTS Order Accounting» = 1. Отлично работает на внешнем интерфейсе.
  • Но отнимает много времени на бэкэнде.

Вот как это работает сейчас: Столбцы по умолчанию в настраиваемом типе записи имеют одно поле настраиваемого порядка , и при нажатии на значок карандаша для его редактирования открывается быстрый edit: Где это тогда позволяет вам ввести число в текстовое поле

Что мне нужно сделать Используя эти пользовательские метасы, найденные в посте отдельного члена команды: используются пользовательские метасы Мне нужен такой же тип функциональности, с иконкой карандаша (текстовое поле или номер не должны появляться сначала). Но когда вы нажимаете на иконку карандаша, быстрое редактирование затягивается, и вы видите что-то похожее на это (примечание: это то, что я сфотографировал вместе. Это та функция, которая мне нужна, и я не могу воссоздать себя в реальном коде): Там, где вы можете выбрать команду из выпадающего списка, в котором перечислены все созданные мной пользовательские метаты, и с условными логами c соответствующее текстовое поле заказа поднимается с правильным числовым значением. Здесь у вас будет шанс чтобы изменить его или ввести значение, если оно еще не было.

Мне удобно добавлять php и изменять его, но я понятия не имею, как этого добиться без руководства. Разработчик плагина не ответил ни на одно из моих сообщений, так что это не вариант. Название плагина - Modern Team Showcase.


Вот код, который отображает поле заказа, если это помогает:

/**
 * Add a new column called Order for the all members page
 */
function mts_cpt_columns($columns) {
  if( current_user_can( WMTS_EDITING_CAP ) ){
    $new_columns = array(
        'order' => __('Order number', 'modern-team-showcase'),
    );
      return array_merge($columns, $new_columns);
  }
  return $columns;
}

add_filter('manage_modernteammembers_posts_columns' , 'mts_cpt_columns');


/**
 * Add a quick edit option for the member order
 */
function display_custom_member_order_quick_edit( $column_name, $post_type ) {
    static $printNonce = TRUE;
    if ( $printNonce ) {
        $printNonce = FALSE;
        wp_nonce_field( 'update-mts-order', 'update-mts-order' );
    }

    ?>
    <fieldset class="inline-edit-col-right inline-edit-order">
      <div class="inline-edit-col column-<?php echo $column_name; ?>">
        <label class="inline-edit-group" style="display: inline-block; background: yellow; padding: 4px 10px;">
        <?php
         switch ( $column_name ) {
         case 'order':
             ?><span class="title">Order number</span><input name="mts-order" type="number" /><?php
             break;
         }
        ?>
        </label>
      </div>
    </fieldset>
    <?php
}
add_action( 'quick_edit_custom_box', 'display_custom_member_order_quick_edit', 10, 2 );

/**
 * Add content for the MTS order column
 */
function mts_custom_columns_content( $column, $post_id ) {
    if($column == 'order'){
        $order = get_post_meta($post_id, 'MTS Order', true);
        if( ! $order ) $order = 0;
        echo $order . '<i class="fa fa-pencil wmts_edit_order"></i>';
    }
}
add_action( 'manage_modernteammembers_posts_custom_column' , 'mts_custom_columns_content', 10, 2 );

/**
 * Add content for the MTS order column
 */
function mts_save_quick_edit_data ( $post_id ) {
    $slug = 'modernteammembers';
    if ( isset($_POST['post_type']) && $slug !== $_POST['post_type'] ) {
        return;
    }
    if ( !current_user_can( 'edit_post', $post_id ) ) {
        return;
    }
    $_POST += array("{$slug}_edit_nonce" => '');
    if ( ! isset( $_POST["update-mts-order"] ) || ! wp_verify_nonce( $_POST["update-mts-order"], 'update-mts-order' ) ) {
        return;
    }
    if ( isset( $_REQUEST['mts-order'] ) ) {
        update_post_meta( $post_id, 'MTS Order', $_REQUEST['mts-order'] );
    }
}
add_action( 'save_post', 'mts_save_quick_edit_data' );

/**
 * Push values into the custom quick edit columns
 */
if ( ! function_exists('wmts_admin_enqueue_quick_edit_script') ) {
    function wmts_admin_enqueue_quick_edit_script( $hook ) {
        if ( 'edit.php' === $hook && isset( $_GET['post_type'] ) && 'modernteammembers' === $_GET['post_type'] ) {
            wp_enqueue_script( 'wmts_quick_edit_script', plugins_url('assets/js/quick_edit_script.js', __FILE__), false, null, true );
        }
    }
}
add_action( 'admin_enqueue_scripts', 'wmts_admin_enqueue_quick_edit_script' );

/**
 * Make the members sortable by MTS Order
 */
add_filter( 'manage_edit-modernteammembers_sortable_columns', 'wmts_modernteammembers_manage_sortable_columns' );
function wmts_modernteammembers_manage_sortable_columns ( $sortable_columns ) {
   $sortable_columns[ 'order' ] = 'order';
   return $sortable_columns;
}

/**
 * Handle the actual sorting of members
 */
add_action( 'pre_get_posts', 'manage_modernteammembers_column_sorting', 1 );
function manage_modernteammembers_column_sorting( $query ) {
   if ( $query->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {
      switch( $orderby ) {
         case 'order':
            $query->set( 'meta_key', 'MTS Order' );
            $query->set( 'orderby', 'meta_value_num' );
            break;
      }
   }
}

------- ---- Это полный код в quick_edit_script. js, на который ссылается --------------

(function($) {

    // we create a copy of the WP inline edit post function
    var $wp_inline_edit = inlineEditPost.edit;

    // and then we overwrite the function with our own code
    inlineEditPost.edit = function( id ) {

        // "call" the original WP edit function
        // we don't want to leave WordPress hanging
        $wp_inline_edit.apply( this, arguments );

        // now we take care of our business

        // get the post ID
        var $post_id = 0;
        if ( typeof( id ) == 'object' ) {
            $post_id = parseInt( this.getId( id ) );
        }

        if ( $post_id > 0 ) {
            // define the edit row
            var $edit_row = $( '#edit-' + $post_id );
            var $post_row = $( '#post-' + $post_id );

            // get the data
            var order = $( '.column-order', $post_row ).text();

            // populate the data
            $( ':input[name="mts-order"]', $edit_row ).val( order );
        }
    };

})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...