Обновление пользовательской опции выбора в форме edit.php при быстром редактировании? - PullRequest
0 голосов
/ 29 октября 2019

Я добавил поле для функции «Быстрое редактирование» в WordPress. Это работает, и я могу обновить базу данных. Тем не менее, у меня много проблем с выяснением, как установить начальное значение меню выбора. По умолчанию всегда используется значение «Открыть», несмотря на использование jQuery, чтобы попытаться обновить значение селектора до нужного значения. Вот соответствующий код, который я собрал из других примеров:

function quick_edit_javascript() {
    global $current_screen;

    if ( 'grievance' != $current_screen->post_type ) {
        return;
    }
?>
    <script type="text/javascript">
    function value_step( fieldValue ) {
        inlineEditPost.revert();

        // This is the broken part
        jQuery('select[name="step"]').val(fieldValue).change();

        // This gets triggered, so I know code is getting executed:
        alert('hi');
    }
    </script>
<?php
}
add_action( 'admin_footer', 'quick_edit_javascript' );


/**
 * Pass step value to value_step javascript function
 *
 * @param array $actions
 * @param array $post
 *
 * @return array
 */
function expand_quick_edit_link( $actions, $post ) {
    global $current_screen;

    if ( 'grievance' != $current_screen->post_type ) {
        return $actions;
    }
    $meta = get_post_meta( $post->ID, 'my_first_plugin_fields', true);
    $data = $meta['step'];

    $actions['inline hide-if-no-js']    = '<a href="#" class="editinline" title="';
    $actions['inline hide-if-no-js']    .= esc_attr( 'Edit this item inline' ) . '"';
    $actions['inline hide-if-no-js']    .= " onclick=\"value_step('{$data}')\" >";
    $actions['inline hide-if-no-js']    .= 'Quick Edit';
    $actions['inline hide-if-no-js']    .= '</a>';

    return $actions;
}
add_filter( 'post_row_actions', 'expand_quick_edit_link', 10, 2 );

Я пробовал много разных методов jQuery, но ничего не делал, обновлял значение меню выбора. Как ни странно, это работает:

jQuery('select[name="step"]').hide();

Так что я знаю, что селектор работает. Я попытался установить меню выбора с жестко заданными значениями:

jQuery('select[name="step"]').val(2).change();

и

jQuery('select[name="step"]').val('2').change();

Но это не сработало. Я не уверен, что еще попробовать. HTML-код поля select выглядит следующим образом:

<div class="inline-edit-col">
    <select name="step"><option value="1">Open</option><option value="2">Closed</option></select>
  </div>

1 Ответ

0 голосов
/ 30 октября 2019

Под капюшоном происходит какое-то вуду, которое я не могу объяснить. Это работает (обратите внимание, что класс .inline-edit-col был добавлен в селектор jquery, но это не то, что делает эту работу):

function quick_edit_javascript() {
    global $current_screen;

    if ( 'grievance' != $current_screen->post_type ) {
        return;
    }
?>
    <script type="text/javascript">
    function value_step( fieldValue ) {
        inlineEditPost.revert();
        var checkExist = setInterval(function() {
          alert('check exist');
          if (jQuery('.inline-edit-col select[name="step"]').length) {
                jQuery('.inline-edit-col select[name="step"]').val(2).change();
              clearInterval(checkExist);
          }
        }, 100);
        jQuery('.inline-edit-col select[name="step"]').val('2').change();
        alert('hi');
        alert(jQuery('.inline-edit-col select[name="step"]').children("option:selected").val());
    }
    </script>
<?php
}
add_action( 'admin_footer', 'quick_edit_javascript' );

Что я действительно не понимаю, так это то, что alert('hi') ипоявляется предупреждение, после которого выводится значение поля, и затем появляется предупреждение alert('check exist'). Может быть, кто-то, более знакомый с javascript, может помочь объяснить, что происходит.

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