Пользовательский шорткод WordPress прерывает процесс сохранения (post.php)

У меня странная проблема с шорткодами в WordPress. Когда я сохраняю страницу при добавлении шорткода, он перенаправляет меня на wp-admin/post.php и показывает белую страницу с результатами шорткода в формате html (см. Снимок экрана 1). К счастью, все изменения сохранены.

Самое смешное, что я проделывал это десятки раз одним и тем же методом. Но какое-то время это больше не работает.

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

Скриншот 1

Код PHP, который я использую, добавлен в functions.php.

Я использую шорткод [showblog cat = "planning" number=4].

function showblog_func( $atts ) {
    $atts = shortcode_atts([
        'number'    => '-1',
        'cat'       => '',
    ], $atts, 'showblog' );

    $numberposts = $atts['number'];
    $categorie = $atts['cat'];

    //args
    $args = array(
        'post_type'         => 'post',
        'posts_per_page'    => $numberposts,
        'order'             => 'ASC',
    );

    if ($categorie != ""){
        $args = array(
            'post_type'         => 'post',
            'posts_per_page'    => $numberposts,
            'category_name'     => $categorie,
            'order'             => 'ASC',
        );
    }

    // The Query
    $the_query2 = new WP_Query( $args );

    // The Loop
    if ( $the_query2->have_posts() ) {
        echo '<ul class = "blog-list clearfix">';
        while ( $the_query2->have_posts() ) {
            $the_query2->the_post();

            echo '<li class = "blog-block">';
            echo '  <div class = "blog-info">';
            echo '    <h4>'.get_the_title().'</h4>';
            echo '    <p>'.get_the_excerpt().'</p>';
            echo '    <a href = "'.get_the_permalink().'" class = "blog-button">Read full post</a>';
            echo '  </div>';
            echo '</li>';
        }
        echo '</ul>';
        /* Restore original Post Data */
        wp_reset_postdata();
    } else {
        // no posts found
    }
}
add_shortcode( 'showblog', 'showblog_func' );

Шорткод работает нормально на странице / в посте.

Mukesh Panchal 08.08.2018 11:17

Привет, Мукеш, Спасибо за ответ. Шорткод действительно работает нормально. Но когда я добавляю шорткод на страницу и нажимаю «обновить». Он перенаправляет меня на post.php и показывает значение шорткодов в формате HTML (см. Снимок экрана 1).

Flint 08.08.2018 11:21

Тогда любой код из темы или плагина генерирует ошибку при попытке сохранить сообщение, поэтому отключите плагин один за другим и проверьте, решает ли он вашу проблему.

Mukesh Panchal 08.08.2018 11:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
939
2

Ответы 2

Вы не можете повторить HTML шорткода.

Вам нужно привязать HTML к переменной, а затем вернуть этот HTML из шорткода ..

Пожалуйста, проверьте код ниже

function _login_popup() {

    $html = '<form id = "user-login-form" method = "post" action = "#" class = "js-form-redirect js-form-action" novalidate = "">
               <div class = "floating-label form-group">
                  <input id = "useremail" name = "user_name" required = "" value = "" type = "email">
                  <label for = "useremail">Email</label>
               </div>
               <div class = "floating-label form-group">
                  <input id = "userpassword" name = "password" required = "" value = "" type = "password">
                  <label for = "userpassword">Password</label>
               </div>
               <div class = "o-form__buttons text-right --small-center">
                  <button type = "submit" id = "submit_login" class = "a-button-form --save a-no-before" value = "edit">Sign in</button>
               </div>
      </form>';

return $html;
}
add_shortcode('yg-login-popup', '_login_popup');

Решается добавлением ob_start(); сразу после первого тега <?php.

Другие вопросы по теме