Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../public_h.../wp-conte.../plugins/themify-.../classes
File: class-themify-builder-layouts.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* This file defines Builder Layouts and Layout Parts
[2] Fix | Delete
*
[3] Fix | Delete
* Themify_Builder_Layouts class register post type for Layouts and Layout Parts
[4] Fix | Delete
* Custom metabox, shortcode, and load layout / layout part.
[5] Fix | Delete
*
[6] Fix | Delete
*
[7] Fix | Delete
* @package Themify_Builder
[8] Fix | Delete
* @subpackage Themify_Builder/classes
[9] Fix | Delete
*/
[10] Fix | Delete
if (!class_exists('Themify_Builder_Layouts',false)) {
[11] Fix | Delete
[12] Fix | Delete
/**
[13] Fix | Delete
* The Builder Layouts class.
[14] Fix | Delete
*
[15] Fix | Delete
* This class register post type for Layouts and Layout Parts
[16] Fix | Delete
* Custom metabox, shortcode, and load layout / layout part.
[17] Fix | Delete
*
[18] Fix | Delete
*
[19] Fix | Delete
* @package Themify_Builder
[20] Fix | Delete
* @subpackage Themify_Builder/classes
[21] Fix | Delete
* @author Themify
[22] Fix | Delete
*/
[23] Fix | Delete
class Themify_Builder_Layouts {
[24] Fix | Delete
[25] Fix | Delete
/**
[26] Fix | Delete
* Post Type Layout Object.
[27] Fix | Delete
*
[28] Fix | Delete
* @access public
[29] Fix | Delete
* @var object $layout .
[30] Fix | Delete
*/
[31] Fix | Delete
const LAYOUT_SLUG = 'tbuilder_layout';
[32] Fix | Delete
[33] Fix | Delete
/**
[34] Fix | Delete
* Post Type Layout Part Object.
[35] Fix | Delete
*
[36] Fix | Delete
* @access public
[37] Fix | Delete
* @var string $layout_part_slug .
[38] Fix | Delete
*/
[39] Fix | Delete
const LAYOUT_PART_SLUG = 'tbuilder_layout_part';
[40] Fix | Delete
[41] Fix | Delete
/**
[42] Fix | Delete
* Store registered layout / part post types.
[43] Fix | Delete
*
[44] Fix | Delete
* @access public
[45] Fix | Delete
* @var array $post_types .
[46] Fix | Delete
*/
[47] Fix | Delete
private static $post_types = array();
[48] Fix | Delete
[49] Fix | Delete
/**
[50] Fix | Delete
* Holds a list of layout provider instances
[51] Fix | Delete
*/
[52] Fix | Delete
private static $provider_instances = array();
[53] Fix | Delete
[54] Fix | Delete
/**
[55] Fix | Delete
* Constructor
[56] Fix | Delete
*
[57] Fix | Delete
* @access public
[58] Fix | Delete
*/
[59] Fix | Delete
public static function init() {
[60] Fix | Delete
self::register_layout();
[61] Fix | Delete
if (is_admin()) {
[62] Fix | Delete
// Builder write panel
[63] Fix | Delete
add_filter('themify_post_types', array(__CLASS__, 'extend_post_types'));
[64] Fix | Delete
add_filter('themify_builder_post_types_support', array(__CLASS__, 'add_builder_support'));
[65] Fix | Delete
add_action('add_meta_boxes_tbuilder_layout_part', array(__CLASS__, 'custom_meta_boxes'));
[66] Fix | Delete
add_action('add_meta_boxes_tbuilder_layout', array(__CLASS__, 'custom_meta_boxes'));
[67] Fix | Delete
[68] Fix | Delete
// add_action('wp_ajax_set_layout_action', array(__CLASS__, 'set_layout_action'), 10);
[69] Fix | Delete
add_action('wp_ajax_tb_save_custom_layout', array(__CLASS__, 'save_custom_layout_ajaxify'), 10);
[70] Fix | Delete
add_action('wp_ajax_tb_get_save_custom_layout', array(__CLASS__, 'get_custom_layout_ajaxify'), 10);
[71] Fix | Delete
[72] Fix | Delete
// Quick Edit Links
[73] Fix | Delete
add_filter('post_row_actions', array(__CLASS__, 'row_actions'));
[74] Fix | Delete
add_filter('page_row_actions', array(__CLASS__, 'row_actions'));
[75] Fix | Delete
add_filter('bulk_actions-edit-tbuilder_layout_part', array(__CLASS__, 'row_bulk_actions'));
[76] Fix | Delete
add_filter('bulk_actions-edit-tbuilder_layout', array(__CLASS__, 'row_bulk_actions'));
[77] Fix | Delete
add_filter('handle_bulk_actions-edit-tbuilder_layout_part', array(__CLASS__, 'export_row_bulk'), 10, 3);
[78] Fix | Delete
add_filter('handle_bulk_actions-edit-tbuilder_layout', array(__CLASS__, 'export_row_bulk'), 10, 3);
[79] Fix | Delete
add_action('admin_init', array(__CLASS__, 'duplicate_action'));
[80] Fix | Delete
add_action('admin_init', array(__CLASS__, 'export_row'));
[81] Fix | Delete
[82] Fix | Delete
// Ajax hook for Layout and Layout Parts import file.
[83] Fix | Delete
add_action('wp_ajax_tb_bulk_import', array(__CLASS__, 'row_bulk_import'));
[84] Fix | Delete
add_action('admin_enqueue_scripts', array(__CLASS__, 'admin_enqueue'));
[85] Fix | Delete
}
[86] Fix | Delete
else{
[87] Fix | Delete
add_filter('template_include', array(__CLASS__, 'template_singular_layout'));
[88] Fix | Delete
}
[89] Fix | Delete
add_shortcode('themify_layout_part', array(__CLASS__, 'layout_part_shortcode'));
[90] Fix | Delete
}
[91] Fix | Delete
[92] Fix | Delete
/**
[93] Fix | Delete
* Registers providers for layouts in Builder
[94] Fix | Delete
*
[95] Fix | Delete
* @since 2.0.0
[96] Fix | Delete
*/
[97] Fix | Delete
private static function register_providers() {
[98] Fix | Delete
$providers = apply_filters('themify_builder_layout_providers', array(
[99] Fix | Delete
'Themify_Builder_Layouts_Provider_Custom'
[100] Fix | Delete
));
[101] Fix | Delete
foreach ($providers as $provider) {
[102] Fix | Delete
if (class_exists($provider,false)) {
[103] Fix | Delete
$instance = new $provider();
[104] Fix | Delete
self::$provider_instances[$instance->get_id()] = $instance;
[105] Fix | Delete
}
[106] Fix | Delete
}
[107] Fix | Delete
}
[108] Fix | Delete
[109] Fix | Delete
/**
[110] Fix | Delete
* Get a single layout provider instance
[111] Fix | Delete
*
[112] Fix | Delete
* @since 2.0.0
[113] Fix | Delete
*/
[114] Fix | Delete
public static function get_provider($id) {
[115] Fix | Delete
return isset(self::$provider_instances[$id]) ? self::$provider_instances[$id] : false;
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
private static function register_layout_post_type() {
[119] Fix | Delete
return new CPT(array(
[120] Fix | Delete
'post_type_name' => self::LAYOUT_SLUG,
[121] Fix | Delete
'singular' => __('Layout', 'themify'),
[122] Fix | Delete
'plural' => __('Layouts', 'themify')
[123] Fix | Delete
), array(
[124] Fix | Delete
'supports' => array('title', 'thumbnail'),
[125] Fix | Delete
'exclude_from_search' => true,
[126] Fix | Delete
'show_in_nav_menus' => false,
[127] Fix | Delete
'show_in_menu' => false,
[128] Fix | Delete
'public' => true
[129] Fix | Delete
));
[130] Fix | Delete
}
[131] Fix | Delete
[132] Fix | Delete
private static function register_layout_part_post_type() {
[133] Fix | Delete
return new CPT(array(
[134] Fix | Delete
'post_type_name' => self::LAYOUT_PART_SLUG,
[135] Fix | Delete
'singular' => __('Layout Part', 'themify'),
[136] Fix | Delete
'plural' => __('Layout Parts', 'themify'),
[137] Fix | Delete
'slug' => 'tbuilder-layout-part'
[138] Fix | Delete
), array(
[139] Fix | Delete
'supports' => array('title', 'thumbnail'),
[140] Fix | Delete
'exclude_from_search' => true,
[141] Fix | Delete
'show_in_nav_menus' => false,
[142] Fix | Delete
'show_in_admin_bar' => true,
[143] Fix | Delete
'show_in_menu' => false,
[144] Fix | Delete
'public' => true
[145] Fix | Delete
));
[146] Fix | Delete
}
[147] Fix | Delete
[148] Fix | Delete
/**
[149] Fix | Delete
* Register Layout and Layout Part Custom Post Type
[150] Fix | Delete
*
[151] Fix | Delete
* @access public
[152] Fix | Delete
*/
[153] Fix | Delete
private static function register_layout() {
[154] Fix | Delete
if (!class_exists('CPT',false)) {
[155] Fix | Delete
include THEMIFY_DIR . '/CPT.php';
[156] Fix | Delete
}
[157] Fix | Delete
[158] Fix | Delete
// create a template custom post type
[159] Fix | Delete
$layout = self::register_layout_post_type();
[160] Fix | Delete
[161] Fix | Delete
// define the columns to appear on the admin edit screen
[162] Fix | Delete
$layout->columns(array(
[163] Fix | Delete
'cb' => '<input type="checkbox" />',
[164] Fix | Delete
'title' => __('Title', 'themify'),
[165] Fix | Delete
'thumbnail' => __('Thumbnail', 'themify'),
[166] Fix | Delete
'author' => __('Author', 'themify'),
[167] Fix | Delete
'date' => __('Date', 'themify')
[168] Fix | Delete
));
[169] Fix | Delete
[170] Fix | Delete
// populate the thumbnail column
[171] Fix | Delete
$layout->populate_column('thumbnail', array(__CLASS__, 'populate_column_layout_thumbnail'));
[172] Fix | Delete
[173] Fix | Delete
// use "pages" icon for post type
[174] Fix | Delete
$layout->menu_icon('dashicons-admin-page');
[175] Fix | Delete
[176] Fix | Delete
// create a template custom post type
[177] Fix | Delete
$layout_part = self::register_layout_part_post_type();
[178] Fix | Delete
[179] Fix | Delete
// define the columns to appear on the admin edit screen
[180] Fix | Delete
$layout_part->columns(array(
[181] Fix | Delete
'cb' => '<input type="checkbox" />',
[182] Fix | Delete
'title' => __('Title', 'themify'),
[183] Fix | Delete
'shortcode' => __('Shortcode', 'themify'),
[184] Fix | Delete
'author' => __('Author', 'themify'),
[185] Fix | Delete
'date' => __('Date', 'themify')
[186] Fix | Delete
));
[187] Fix | Delete
[188] Fix | Delete
// populate the thumbnail column
[189] Fix | Delete
$layout_part->populate_column('shortcode', array(__CLASS__, 'populate_column_layout_part_shortcode'));
[190] Fix | Delete
[191] Fix | Delete
// use "pages" icon for post type
[192] Fix | Delete
$layout_part->menu_icon('dashicons-screenoptions');
[193] Fix | Delete
[194] Fix | Delete
self::set_post_type_var($layout->post_type_name);
[195] Fix | Delete
self::set_post_type_var($layout_part->post_type_name);
[196] Fix | Delete
[197] Fix | Delete
add_post_type_support($layout->post_type_name, 'revisions');
[198] Fix | Delete
add_post_type_support($layout_part->post_type_name, 'revisions');
[199] Fix | Delete
if (is_admin()) {
[200] Fix | Delete
self::register_providers();
[201] Fix | Delete
}
[202] Fix | Delete
}
[203] Fix | Delete
[204] Fix | Delete
/**
[205] Fix | Delete
* Set the post type variable.
[206] Fix | Delete
*
[207] Fix | Delete
* @access public
[208] Fix | Delete
* @param string $name
[209] Fix | Delete
*/
[210] Fix | Delete
public static function set_post_type_var(string $name) {
[211] Fix | Delete
self::$post_types[] = $name;
[212] Fix | Delete
}
[213] Fix | Delete
[214] Fix | Delete
/**
[215] Fix | Delete
* Custom column thumbnail.
[216] Fix | Delete
*
[217] Fix | Delete
* @access public
[218] Fix | Delete
* @param array $column
[219] Fix | Delete
* @param object $post
[220] Fix | Delete
*/
[221] Fix | Delete
public static function populate_column_layout_thumbnail($column, $post) {
[222] Fix | Delete
echo get_the_post_thumbnail($post->ID, 'thumbnail');
[223] Fix | Delete
}
[224] Fix | Delete
[225] Fix | Delete
/**
[226] Fix | Delete
* Custom column for shortcode.
[227] Fix | Delete
*
[228] Fix | Delete
* @access public
[229] Fix | Delete
* @param array $column
[230] Fix | Delete
* @param object $post
[231] Fix | Delete
*/
[232] Fix | Delete
public static function populate_column_layout_part_shortcode($column, $post) {
[233] Fix | Delete
echo
[234] Fix | Delete
'<input readonly size="30" type="text" onclick="this.select();" value="' . esc_attr(sprintf('[themify_layout_part id="%d"]', $post->ID)) . '">',
[235] Fix | Delete
'<br/>',
[236] Fix | Delete
'<input readonly size="30" type="text" onclick="this.select();" value="' . esc_attr(sprintf('[themify_layout_part slug="%s"]', $post->post_name)) . '">';
[237] Fix | Delete
}
[238] Fix | Delete
[239] Fix | Delete
/**
[240] Fix | Delete
* Includes this custom post to array of cpts managed by Themify
[241] Fix | Delete
*
[242] Fix | Delete
* @access public
[243] Fix | Delete
* @param Array $types
[244] Fix | Delete
* @return Array
[245] Fix | Delete
*/
[246] Fix | Delete
public static function extend_post_types(array $types):array {
[247] Fix | Delete
$types[]=self::LAYOUT_SLUG;
[248] Fix | Delete
$types[]=self::LAYOUT_PART_SLUG;
[249] Fix | Delete
return $types;
[250] Fix | Delete
}
[251] Fix | Delete
[252] Fix | Delete
/**
[253] Fix | Delete
* Add meta boxes to layout and/or layout part screens.
[254] Fix | Delete
*
[255] Fix | Delete
* @access public
[256] Fix | Delete
* @param object $post
[257] Fix | Delete
*/
[258] Fix | Delete
public static function custom_meta_boxes($post) {
[259] Fix | Delete
add_meta_box('layout-part-info', __('Using this Layout Part', 'themify'), array(__CLASS__, 'layout_part_info'), self::LAYOUT_PART_SLUG, 'side', 'default');
[260] Fix | Delete
}
[261] Fix | Delete
[262] Fix | Delete
/**
[263] Fix | Delete
* Displays information about this layout part.
[264] Fix | Delete
*
[265] Fix | Delete
* @access public
[266] Fix | Delete
*/
[267] Fix | Delete
public static function layout_part_info() {
[268] Fix | Delete
$layout_part = get_post();
[269] Fix | Delete
echo '<div>', __('To display this Layout Part, insert this shortcode:', 'themify'), '<br/>
[270] Fix | Delete
<input type="text" readonly="readonly" class="widefat" onclick="this.select()" value="' . esc_attr('[themify_layout_part id="' . $layout_part->ID . '"]') . '" />';
[271] Fix | Delete
if (!empty($layout_part->post_name)) {
[272] Fix | Delete
echo '<input type="text" readonly="readonly" class="widefat" onclick="this.select()" value="' . esc_attr('[themify_layout_part slug="' . $layout_part->post_name . '"]') . '" />';
[273] Fix | Delete
}
[274] Fix | Delete
echo '</div>';
[275] Fix | Delete
}
[276] Fix | Delete
[277] Fix | Delete
/**
[278] Fix | Delete
* Custom layout for Template / Template Part Builder Editor.
[279] Fix | Delete
*/
[280] Fix | Delete
public static function template_singular_layout(?string $original_template):?string{
[281] Fix | Delete
if (is_singular(array(self::LAYOUT_SLUG, self::LAYOUT_PART_SLUG))) {
[282] Fix | Delete
$templatefilename = 'template-builder-editor.php';
[283] Fix | Delete
[284] Fix | Delete
$return_template = locate_template(
[285] Fix | Delete
array(
[286] Fix | Delete
trailingslashit('themify-builder/templates') . $templatefilename
[287] Fix | Delete
)
[288] Fix | Delete
);
[289] Fix | Delete
[290] Fix | Delete
// Get default template
[291] Fix | Delete
if (!$return_template){
[292] Fix | Delete
$return_template = THEMIFY_BUILDER_TEMPLATES_DIR . '/' . $templatefilename;
[293] Fix | Delete
}
[294] Fix | Delete
return $return_template;
[295] Fix | Delete
} else {
[296] Fix | Delete
return $original_template;
[297] Fix | Delete
}
[298] Fix | Delete
}
[299] Fix | Delete
/*
[300] Fix | Delete
public static function set_layout_action() {
[301] Fix | Delete
check_ajax_referer('tf_nonce', 'nonce');
[302] Fix | Delete
if ( ! empty( $_POST['bid'] ) && current_user_can( 'edit_post', $_POST['bid'] ) ) {
[303] Fix | Delete
$mode = !empty($_POST['mode']) ? 'themify_builder_layout_appended' : 'themify_builder_layout_loaded';
[304] Fix | Delete
do_action($mode, array('template_slug' => '', 'current_builder_id' => (int) $_POST['bid'], 'layout_group' => '', 'builder_data' => ''));
[305] Fix | Delete
}
[306] Fix | Delete
die;
[307] Fix | Delete
}
[308] Fix | Delete
*/
[309] Fix | Delete
[310] Fix | Delete
/**
[311] Fix | Delete
* Layout Part Shortcode
[312] Fix | Delete
*
[313] Fix | Delete
* @access public
[314] Fix | Delete
* @param array $atts
[315] Fix | Delete
* @return string
[316] Fix | Delete
*/
[317] Fix | Delete
public static function layout_part_shortcode(array $atts):string {
[318] Fix | Delete
if ( ! empty( $atts['id'] ) ) {
[319] Fix | Delete
$id = $atts['id'];
[320] Fix | Delete
} else if ( ! empty( $atts['slug'] ) ) {
[321] Fix | Delete
$post = get_page_by_path( $atts['slug'], OBJECT, self::LAYOUT_PART_SLUG );
[322] Fix | Delete
if ( ! $post ) {
[323] Fix | Delete
return '';
[324] Fix | Delete
}
[325] Fix | Delete
$id = $post->ID;
[326] Fix | Delete
} else {
[327] Fix | Delete
return '';
[328] Fix | Delete
}
[329] Fix | Delete
[330] Fix | Delete
$id = themify_maybe_translate_object_id( $id );
[331] Fix | Delete
$post = get_post( $id );
[332] Fix | Delete
if ( ! $post ) {
[333] Fix | Delete
return '';
[334] Fix | Delete
}
[335] Fix | Delete
$id = $post->ID;
[336] Fix | Delete
if ($id == Themify_Builder::$builder_active_id && Themify_Builder_Model::is_front_builder_activate()) {
[337] Fix | Delete
static $isDone = false; //return only for first element
[338] Fix | Delete
if ($isDone === false) {
[339] Fix | Delete
$isDone = true;
[340] Fix | Delete
return Themify_Builder::render($id);
[341] Fix | Delete
}
[342] Fix | Delete
}
[343] Fix | Delete
// infinite-loop prevention
[344] Fix | Delete
static $stack = array();
[345] Fix | Delete
if (isset($stack[$id])) {
[346] Fix | Delete
$message = sprintf(__('Layout Part %s is in an infinite loop.', 'themify'), $id);
[347] Fix | Delete
return "<!-- {$message} -->";
[348] Fix | Delete
} else {
[349] Fix | Delete
$stack[$id] = true;
[350] Fix | Delete
}
[351] Fix | Delete
[352] Fix | Delete
$output = '';
[353] Fix | Delete
$builder_data = ThemifyBuilder_Data_Manager::get_data($id);
[354] Fix | Delete
// Check For page break module
[355] Fix | Delete
if (!Themify_Builder::$frontedit_active) {
[356] Fix | Delete
$module_list = Themify_Builder::get_builder_modules_list($id);
[357] Fix | Delete
$page_breaks = 0;
[358] Fix | Delete
foreach ($module_list as $module) {
[359] Fix | Delete
if (isset($module['mod_name']) && 'page-break' === $module['mod_name']) {
[360] Fix | Delete
++$page_breaks;
[361] Fix | Delete
}
[362] Fix | Delete
}
[363] Fix | Delete
unset($module_list);
[364] Fix | Delete
$template_args = array();
[365] Fix | Delete
if ($page_breaks > 0) {
[366] Fix | Delete
$pb_result = Themify_Builder::load_current_inner_page_content($builder_data, $page_breaks);
[367] Fix | Delete
$builder_data = $pb_result['builder_data'];
[368] Fix | Delete
$template_args['pb_pagination'] = $pb_result['pagination'];
[369] Fix | Delete
$pb_result = null;
[370] Fix | Delete
}
[371] Fix | Delete
}
[372] Fix | Delete
if (!empty($builder_data)) {
[373] Fix | Delete
$template_args['builder_output'] = $builder_data;
[374] Fix | Delete
$template_args['builder_id'] = $id;
[375] Fix | Delete
$template_args['l_p'] = true;
[376] Fix | Delete
if (Themify_Builder::$frontedit_active === false) {
[377] Fix | Delete
$isActive = isset($_POST['action']) && $_POST['action'] === 'tb_render_element_shortcode';
[378] Fix | Delete
Themify_Builder::$frontedit_active = $isActive;
[379] Fix | Delete
}
[380] Fix | Delete
$output = Themify_Builder_Component_Module::retrieve_template('builder-layout-part-output.php', $template_args, THEMIFY_BUILDER_TEMPLATES_DIR, '', false);
[381] Fix | Delete
if (isset($isActive)) {
[382] Fix | Delete
Themify_Builder::$frontedit_active = false;
[383] Fix | Delete
}
[384] Fix | Delete
if (!themify_is_ajax()) {
[385] Fix | Delete
Themify_Builder::get_builder_stylesheet($output);
[386] Fix | Delete
}
[387] Fix | Delete
unset($template_args);
[388] Fix | Delete
}
[389] Fix | Delete
[390] Fix | Delete
unset($stack[$id]);
[391] Fix | Delete
[392] Fix | Delete
return $output;
[393] Fix | Delete
}
[394] Fix | Delete
[395] Fix | Delete
/**
[396] Fix | Delete
* Save as Layout
[397] Fix | Delete
*
[398] Fix | Delete
* @access public
[399] Fix | Delete
*/
[400] Fix | Delete
public static function save_custom_layout_ajaxify() {
[401] Fix | Delete
check_ajax_referer('tf_nonce', 'nonce');
[402] Fix | Delete
$response = array(
[403] Fix | Delete
'status' => 'failed',
[404] Fix | Delete
'msg' => __('Something went wrong', 'themify')
[405] Fix | Delete
);
[406] Fix | Delete
if (!empty($_POST['postid']) && current_user_can( 'edit_posts' )) {
[407] Fix | Delete
$template = get_post((int) $_POST['postid']);
[408] Fix | Delete
$title = !empty($_POST['layout_title_field']) ? sanitize_text_field($_POST['layout_title_field']) : $template->post_title . ' Layout';
[409] Fix | Delete
$builder_data = ThemifyBuilder_Data_Manager::get_data($template->ID);
[410] Fix | Delete
if (!empty($builder_data)) {
[411] Fix | Delete
$new_id = wp_insert_post(array(
[412] Fix | Delete
'post_status' => current_user_can( 'publish_posts' ) ? 'publish' : 'draft',
[413] Fix | Delete
'post_type' => self::LAYOUT_SLUG,
[414] Fix | Delete
'post_author' => $template->post_author,
[415] Fix | Delete
'post_title' => $title
[416] Fix | Delete
));
[417] Fix | Delete
[418] Fix | Delete
ThemifyBuilder_Data_Manager::save_data($builder_data, $new_id);
[419] Fix | Delete
[420] Fix | Delete
// Set image as Featured Image
[421] Fix | Delete
if (!empty($_POST['layout_img_field_id'])) {
[422] Fix | Delete
set_post_thumbnail($new_id, (int) $_POST['layout_img_field_id']);
[423] Fix | Delete
}
[424] Fix | Delete
$response['status'] = 'success';
[425] Fix | Delete
$response['msg'] = '';
[426] Fix | Delete
}
[427] Fix | Delete
}
[428] Fix | Delete
wp_send_json($response);
[429] Fix | Delete
}
[430] Fix | Delete
[431] Fix | Delete
public static function get_custom_layout_ajaxify() {
[432] Fix | Delete
check_ajax_referer('tf_nonce', 'nonce');
[433] Fix | Delete
if ( ! current_user_can( 'edit_posts' ) ) {
[434] Fix | Delete
die;
[435] Fix | Delete
}
[436] Fix | Delete
[437] Fix | Delete
$slug = !empty($_POST['slug']) ? sanitize_text_field($_POST['slug']) : '';
[438] Fix | Delete
if ($slug !== '') {
[439] Fix | Delete
$args = array(
[440] Fix | Delete
'name' => $slug,
[441] Fix | Delete
'post_type' => self::LAYOUT_SLUG,
[442] Fix | Delete
'post_status' => 'publish',
[443] Fix | Delete
'no_found_rows' => true,
[444] Fix | Delete
'cache_results' => false,
[445] Fix | Delete
'numberposts' => 1
[446] Fix | Delete
);
[447] Fix | Delete
$template = get_posts($args);
[448] Fix | Delete
if ($template) {
[449] Fix | Delete
$layouts = ThemifyBuilder_Data_Manager::get_data($template[0]->ID);
[450] Fix | Delete
} else {
[451] Fix | Delete
wp_send_json_error(__('Requested layout not found.', 'themify'));
[452] Fix | Delete
}
[453] Fix | Delete
} else {
[454] Fix | Delete
$layouts = self::get_saved_layouts();
[455] Fix | Delete
}
[456] Fix | Delete
wp_send_json($layouts);
[457] Fix | Delete
}
[458] Fix | Delete
[459] Fix | Delete
/**
[460] Fix | Delete
* Get a list of "custom" layouts, each post from the "tbuilder_layout" post type
[461] Fix | Delete
* is a Custom layout, this returns a list of them all
[462] Fix | Delete
*
[463] Fix | Delete
* @return array
[464] Fix | Delete
*/
[465] Fix | Delete
public static function get_saved_layouts(int $limit = -1) {
[466] Fix | Delete
global $post;
[467] Fix | Delete
$layouts = array();
[468] Fix | Delete
$posts = new WP_Query(array(
[469] Fix | Delete
'post_type' => self::LAYOUT_SLUG,
[470] Fix | Delete
'post_status' => 'publish',
[471] Fix | Delete
'posts_per_page' => $limit,
[472] Fix | Delete
'orderby' => 'title',
[473] Fix | Delete
'order' => 'ASC',
[474] Fix | Delete
'ignore_sticky_posts' => true,
[475] Fix | Delete
'no_found_rows' => true,
[476] Fix | Delete
'update_post_term_cache' => false,
[477] Fix | Delete
'update_post_meta_cache' => false,
[478] Fix | Delete
'cache_results' => false
[479] Fix | Delete
));
[480] Fix | Delete
while ($posts->have_posts()) {
[481] Fix | Delete
$posts->the_post();
[482] Fix | Delete
$url = get_the_post_thumbnail_url($post, 'thumbnail');
[483] Fix | Delete
$layouts[] = array(
[484] Fix | Delete
'title' => get_the_title(),
[485] Fix | Delete
'slug' => $post->post_name,
[486] Fix | Delete
'thumbnail' => !empty($url) ? $url : THEMIFY_BUILDER_URI . '/img/image-placeholder.png',
[487] Fix | Delete
'url' => get_permalink( $post->ID )
[488] Fix | Delete
);
[489] Fix | Delete
}
[490] Fix | Delete
wp_reset_postdata();
[491] Fix | Delete
return $layouts;
[492] Fix | Delete
}
[493] Fix | Delete
[494] Fix | Delete
/**
[495] Fix | Delete
* Add custom link actions in post / page rows
[496] Fix | Delete
*
[497] Fix | Delete
* @access public
[498] Fix | Delete
* @param array $actions
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function