У меня странная проблема с шорткодами в WordPress. Когда я сохраняю страницу при добавлении шорткода, он перенаправляет меня на wp-admin/post.php и показывает белую страницу с результатами шорткода в формате html (см. Снимок экрана 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' );
Привет, Мукеш, Спасибо за ответ. Шорткод действительно работает нормально. Но когда я добавляю шорткод на страницу и нажимаю «обновить». Он перенаправляет меня на post.php и показывает значение шорткодов в формате HTML (см. Снимок экрана 1).
Тогда любой код из темы или плагина генерирует ошибку при попытке сохранить сообщение, поэтому отключите плагин один за другим и проверьте, решает ли он вашу проблему.






Вы не можете повторить 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.
Шорткод работает нормально на странице / в посте.