menex.ru
← Все статьи

Шорткод для вывода Oxygen templates и reusable в любом месте на сайте

29.05.2024 • Теги: #hook #Oxygen #PHP

Как то нужно было сделать, чтобы шаблон сделанный в Oxygen показывался через шорткод в меню или выводился в баннере отдельно. Тогда я нашел замечательную статью Shortcode for displaying Oxygen templates and reusable parts. В не был готовый шорткод, в катором указывался ID reusable и он выводил контент с Oxy в любом месте. Проблема была только в оформлении, все настройки нужно было делать через классы, так как настройки к селектору ID не применялись, так как файлы со стилями не подгружались для этого reusable в других местах (так как он вставлялся не стандартно)

Вот пример этого кода:

add_shortcode( 'oxygen-template', 'func_oxygen_template' );
/**
 * Add a custom shortcode for displaying a Oxygen template/reusable part.
 *
 * Sample usage: <!-- Oxygen template removed -->
 *
 * @param array $atts Shortcode attributes.
 * @return string HTML output of the specified Oxygen template/reusable part.
 */
function func_oxygen_template( $atts ) {

    return do_oxygen_elements( json_decode( get_post_meta( $atts['id'], 'ct_builder_json', true ), true ) );

}

А в мае 2024 года после обновления Oxygen c 4.8.2 до 4.8.3 этот код перестал работать, и шорткод выводил пустое место. Оказалось, что причина была в прификсе мета полей. Так как с версии 4.8.3 мета поля были с прификсом «_» (нижнего подчеркивания).

И код изменился на такой с версии =>4.8.3:

add_shortcode( 'oxygen-template', 'func_oxygen_template' );
/**
 * Add a custom shortcode for displaying a Oxygen template/reusable part.
 *
 * Sample usage: <!-- Oxygen template removed -->
 *
 * @param array $atts Shortcode attributes.
 * @return string HTML output of the specified Oxygen template/reusable part.
 */
function func_oxygen_template( $atts ) {

    return do_oxygen_elements( json_decode( get_post_meta( $atts['id'], '_ct_builder_json', true ), true ) );

}