SeedProd Theme to build your web site, which disables the WordPress theme system.', 'coming-soon' ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped,WordPress.WP.I18n.MissingTranslatorsComment
menu_page_url( 'seedprod_lite', false ) . '#/theme-templates' // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
);
?>
prefix . 'posts';
$meta_tablename = $wpdb->prefix . 'postmeta';
if ( empty( $_REQUEST['id'] ) || ( ! empty( $_REQUEST['a'] ) && 'export_all_themetemplates' === $_REQUEST['a'] ) ) {
$sql = "SELECT * FROM $tablename p LEFT JOIN $meta_tablename pm ON (pm.post_id = p.ID)";
$sql .= " WHERE post_status='publish' AND post_type = 'seedprod' AND meta_key = '_seedprod_is_theme_template' ";
$results = $wpdb->get_results( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
} else {
$ids = explode( ',', sanitize_text_field( wp_unslash( $_REQUEST['id'] ) ) );
$how_many = count( $ids );
$placeholders = array_fill( 0, $how_many, '%d' );
$format = implode( ', ', $placeholders );
$sql = "SELECT * FROM $tablename WHERE id IN ($format)";
$safe_sql = $wpdb->prepare( $sql, $ids ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$results = $wpdb->get_results( $safe_sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}
foreach ( $results as $k => $v ) {
// get_post_meta
$meta = wp_json_encode( get_post_meta( $v->ID ) );
$export[] = array(
'post_content' => base64_encode( $v->post_content ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
'post_content_filtered' => base64_encode( $v->post_content_filtered ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
'post_title' => base64_encode( $v->post_title ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
'meta' => base64_encode( $meta ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
);
}
$export_json = wp_json_encode( $export );
$domain = wp_parse_url( get_home_url() )['host'];
$filename = sprintf( '%1$s-%2$s-%3$s', $domain . '-seedprod-theme', gmdate( 'Ymd' ), gmdate( 'His' ) );
seedprod_lite_export_theme_parts_json( $export_json, $filename );
}
}
}
add_action( 'admin_init', 'seedprod_lite_theme_export' );
/**
* Creates export JSON
*
* @param mixed $data Theme data.
* @param string $filename Export file name.
* @return void
*/
function seedprod_lite_export_theme_parts_json( $data, $filename ) {
// No point in creating the export file on the file-system. We'll stream
// it straight to the browser. Much nicer.
// Open the output stream
$fh = fopen( 'php://output', 'w' );
// Start output buffering (to capture stream contents)
ob_start();
echo $data; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
// Get the contents of the output buffer
$string = ob_get_clean();
// Output CSV-specific headers
header( 'Pragma: public' );
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Cache-Control: private', false );
header( 'Content-Type: application/octet-stream' );
header( 'Content-Disposition: attachment; filename="' . $filename . '.json";' );
header( 'Content-Transfer-Encoding: binary' );
// Stream the CSV data
exit( $string ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* Imports Theme Templates JSON
*
* @return JSON object.
*/
function seedprod_lite_import_theme_request() {
if ( check_ajax_referer( 'seedprod_lite_import_theme_request' ) && ! empty( $_REQUEST['id'] ) ) {
if ( ! current_user_can( apply_filters( 'seedprod_import_theme_request', 'edit_others_posts' ) ) ) {
wp_send_json_error();
}
$id = absint( $_REQUEST['id'] );
seedprod_lite_theme_import( $id );
update_option( 'seedprod_theme_id', $id );
wp_send_json( true );
}
}
/**
* Delete Theme Page
*
* @return JSON object.
*/
function seedprod_lite_delete_theme_pages(){
if ( check_ajax_referer( 'seedprod_lite_delete_theme_pages' ) ) {
if ( ! current_user_can( apply_filters( 'seedprod_import_theme_request', 'edit_others_posts' ) ) ) {
wp_send_json_error();
}
global $wpdb;
$tablename = $wpdb->prefix . 'posts';
$meta_tablename = $wpdb->prefix . 'postmeta';
$sql = "SELECT p.ID FROM $tablename p
LEFT JOIN $meta_tablename pm ON (pm.post_id = p.ID)
WHERE post_type = 'seedprod'
AND meta_key = '_seedprod_is_theme_template'
AND post_status != 'trash'";
$results = $wpdb->get_results($sql);
if (empty($results)) {
wp_send_json_error('No theme template pages found to delete');
}
foreach ($results as $result) {
wp_trash_post($result->ID);
}
wp_send_json( true );
}
}
/**
* Process Imports Theme Templates JSON
* @param integer $id ID of theme template.
* @return void.
*/
function seedprod_lite_theme_import( $id = null ) {
// get remote theme
$code = '';
$apikey = get_option( 'seedprod_api_token' );
$url = SEEDPROD_API_URL . 'themes?plugin_version='.SEEDPROD_VERSION.'&id=' . $id . '&filter=theme_code_zip&api_token=' . $apikey;
$response = wp_remote_get( $url );
if ( is_wp_error( $response ) ) {
$code = $response->get_error_message();
} else {
$response_code = wp_remote_retrieve_response_code( $response );
if ( 200 === $response_code ) {
$code = $response['body'];
} else {
$code = __( "