настройка фильтра the_password_form

Я пытаюсь настроить the_password_form для его интеграции с встроенными формами бутстрапа с помощью функции add_filter ():

function custom_passowrd_form ( $form ) { global $post; $label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID ); $form = '<p>' . __( "To view this protected post, enter the password below:" ) . '</p>' . '<form class="form-inline" action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" method="post">' . '<div class="form-group"> ' . '<label class="sr-only" for="' . $label . '">' . __('Password') . ' :</label>' . '<input placeholder="'. __('Password') . '" class="form-control" name="post_password" id="' . $label . '" type="password" size="20" maxlength="20" />'. '</div>' . '<input class="btn btn-primary" type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" />' . '</form>'; return $form; } if (! is_admin()) { add_filter('the_password_form','custom_passowrd_form'); } 

все в порядке, но проблема заключается в дополнительном <p> который обертывает кнопку отправки, вот вывод:

 <form class="form-inline" action="http://127.0.0.1/wp-login.php?action=postpass" method="post"> <div class="form-group"> <label class="sr-only" for="pwbox-27"> Password : </label> <input placeholder="Password" class="form-control" name="post_password" id="pwbox-27" type="password" size="20" maxlength="20"> </div> <p> <input class="btn btn-primary" type="submit" name="Submit" value="Submit"> </p> </form> 

Solutions Collecting From Web of "настройка фильтра the_password_form"

Выход из формы пароля фильтруется через фильтр the_content когда вы вызываете the_content() в своем шаблоне.

Это означает, что он также wpautop() функцию wpautop() которая обертывает <p></p> вокруг вашей кнопки отправки с помощью этого кода:

 // Rebuild the content as a string, wrapping every bit with a <p>. foreach ( $pees as $tinkle ) { $pee .= '<p>' . trim($tinkle, "\n") . "</p>\n"; } 

Вы можете переместить кнопку отправки в своей части <div></div> или попытаться удалить фильтрацию wpautotop только при отображении формы пароля.

Другим подходом было бы удалить теги <p></p> вокруг ваших элементов ввода:

 add_filter( 'the_content', function( $content ) { // Check if we have an input element in the content if( false !== strpos( $content, '<input ' ) ) $content = preg_replace('|<p>\s*(<input[^>]+/?>)\s*</p>|', "$1", $content ); return $content; }, 11 ); 

где мы используем приоритет позже 10.