Шорткоды ломают сайт Wordpress

Я создаю новые шорткоды для Wordpress на своей локальной версии веб-сайта Wordpress.

В functions.php я добавляю, например:

function shortTest() {  
    return 'Test for shortcodes ';  
} 

add_shortcode('shortTestHTML', 'shortTest');  

Добавление только функции — это нормально, но когда я добавляю часть add_shortcode(), я получаю серьезную проблему.

Что-то ломается, и я получаю 500 ошибок, то есть я больше не могу загрузить свой сайт локально.

Есть идеи???

Огромное спасибо!

РЕДАКТИРОВАТЬ:

Из журнала ошибок PHP: [21 июня 2011 19:02:37] Неустранимая ошибка PHP: вызов неопределенной функции add_shortcode() в /Users/jonas/Sites/jll/wp-includes/functions.php в строке 4505


person jonasll    schedule 21.06.2011    source источник
comment
И какое сообщение об ошибке выдает вам PHP? Проверьте журнал ошибок PHP.   -  person LazyOne    schedule 21.06.2011
comment
[21-Jun-2011 19:02:37] Неустранимая ошибка PHP: вызов неопределенной функции add_shortcode() в /Users/jonas/Sites/jll/wp-includes/functions.php в строке 4505   -  person jonasll    schedule 22.06.2011


Ответы (6)


1) Убедитесь, что вы куда-то включили файл shortcodes.php (например, в wp-load.php или в любое другое более подходящее место).

require_once( ABSPATH . '/wp-includes/shortcodes.php' );

2) Убедитесь, что этот файл существует в вашей установке (я думаю, что он у вас есть, иначе мы увидим другую ошибку).

3) Откуда вы вызываете эту функцию (вижу она вызывается из functions.php, но из какого места)? Возможная проблема здесь - functions.php загружается до shortcodes.php, и если вы используете эту функцию add_shortcode до загрузки shortcodes.php, вы, скорее всего, увидите эту ошибку. Дважды проверьте свой код в этом месте - возможно, переместите вызов add_shortcode в другое место.

person LazyOne    schedule 21.06.2011
comment
1) может ли тема, которую я использую, предотвратить загрузку shortcodes.php и заменить ее другим включением? - person jonasll; 22.06.2011
comment
2) он существует... и 3) я вызываю его в последней строке functions.php - person jonasll; 22.06.2011
comment
3) Я вызываю его в последней строке functions.php В этом проблема. Вы действительно должны вызывать его позже - когда shortcodes.php загружается (например, в конце файла wp-settings.php - но я не уверен на 100%, насколько правильный этот подход). - person LazyOne; 22.06.2011
comment
Хорошо, спасибо, но, согласно документации Wordpress, вы должны добавить это в functions.php... мммм странно... спасибо за вашу помощь! - person jonasll; 23.06.2011
comment
@jonasll Я не говорю: «Не добавляйте в functions.php». Я пытаюсь сказать, что измените способ вызова/вызова функции add_shortcode(). Возможно, его нужно добавить в какую-то уже существующую функцию в functions.php, которая будет вызываться при загрузке всех модулей. У меня нет источников WordPress рядом с банкоматом, поэтому я не могу подтвердить свою мысль. - person LazyOne; 23.06.2011

упомянутого functions.php нет в wp-include/ directory.
он есть в: wp-content/themes/<your-theme-name>/functions.php

person Kaan Ozdincer    schedule 27.08.2014
comment
как это поможет решить проблему? - person pomeh; 27.08.2014
comment
Вы должны создать шорткод в wp-content/themes/‹your-theme-name›/functions.php wp-include/functions.php не является правильным файлом для добавления шорткода. - person Kaan Ozdincer; 28.08.2014
comment
Это был правильный ответ для меня. СПАСИБО! Я модифицировал неправильный файл functions.php. - person fiacobelli; 23.05.2017
comment
Это был правильный ответ и для меня, я поместил свой код не в тот файл functions.php! - person rAthus; 13.07.2018
comment
Этот ответ можно было бы написать более четко, но да, проблема была и у меня - неправильный functions.php! Тогда спасибо! - person Matt; 05.09.2019

добавив это в functions.php, вы говорите? Ну, я не знаю об этом, я сделал это, создав папку внутри папки wp-content/plugins, например. короткий кодтест.

Внутри этой папки создайте файл shortcodetest.php.

в этом файле вы в основном пишете свой код:

<?php
/*
  Plugin Name: ShortCodeTest
  Plugin URI: http://www.example.net
  Description: Print a test message
  Version: 0.1
  Author: anonymous
  Author URI: http://www.example.net
 */

add_shortcode('shortcodetest', 'shortcodetest_function');

function shortcodetest_function() {
    return "test of shortcode";
}

?>

Затем вы входите как администратор, вы увидите плагин ShortCodeTest, активируйте его. Затем вы можете использовать шорткод в своих сообщениях.

Обратите внимание, что комментарии важны... они отображаются в описании плагина.

person Kinjal Dixit    schedule 21.06.2011

У меня есть способ выполнить их, но это немного сложно :)

Вам нужно немного изменить свой шаблон, поместив свой шорткод (например: [inline ....]) между <shortcode></shortcode>, затем

Вот функция для размещения в конце вашего function.php.

function parse_execute_and_echo_shortcode($_path) {
    $str = file_get_contents($_path);
    while (strrpos($str, "<shortcode>")) {
        $beginShortcode = strrpos($str, "<shortcode>");
        $endShortcode = strrpos($str, "</shortcode>");
        $shortcode = substr($str, $beginShortcode + 11, $endShortcode - ($beginShortcode+11));
        $shortcode = do_shortcode($shortcode);
        $str = substr_replace($str, $shortcode, $beginShortcode, $endShortcode + 12);
    }
    echo $str;
}

Затем вы можете позвонить function parse_execute_and_echo_shortcode и указать путь к вашему файлу, содержащему шорткоды.

Надеюсь, что это может помочь кому-то

person quur    schedule 30.05.2013

Проверьте файл error.log (он должен находиться в папке журнала apache).

Вероятно, это связано с тем, что add_shortcode не существует как функция.

person jpiasetz    schedule 21.06.2011
comment
[21-Jun-2011 19:02:37] Неустранимая ошибка PHP: вызов неопределенной функции add_shortcode() в /Users/jonas/Sites/jll/wp-includes/functions.php в строке 4505 - person jonasll; 22.06.2011

Поместите свой шорткод в файл /wp-includes/shortcodes.php таким образом, чтобы убедиться, что он будет загружен, когда все удары и свистки будут запущены и запущены.

person Rafi Wiener    schedule 27.04.2012