- SOLVED
Hi guys,
My client has a WP site, they have the option to upload & attach a video to a post into a custom field (video_high_resolution_mp4_video) (Actually created by MagicFields2, but this seems to be irrelevant).
I have a script that runs via cron to list all posts, finds all posts with the video_high_resolution_mp4_video custom field set and has an empty second custom field called video_vimeo_id.
The script will then upload video from video_high_resolution_mp4_video to Vimeo via the Vimeo API. This works and I get the Vimeo ID back as a string.
$video_id = $vimeo->upload($video_high_resolution_mp4_video);
I get this back
<blockquote>string(8) "34566961"</blockquote>
But, when I try to update the Vimeo ID into the post with update_post_meta, I get an error.
I'm doing
$foo = update_post_meta(get_the_id(), 'videos_vimeo_id', $video_id);
I am also doing
$foo2 = add_post_meta(get_the_id(), 'video_vimeo_id_callback', $video_id, TRUE);
and
$foo4 = add_post_meta(get_the_id(), 'videos_vimeo_id_upload_date', date(r), TRUE);
to prove its not a MagicFields issue, as video_vimeo_id_callback and videos_vimeo_id_upload_date are just new custom post field I made up.
$foo2 & $foo4 randomly returns false on some posts and not others.
I am testing with
if ($foo2 == FALSE) {
echo 'update_post_meta failed. Deleting video from Vimeo';
$delete_from_vimeo = $vimeo->call('vimeo.videos.delete',$video_id);
}
else {
echo 'update_post_meta succeeded';
}
I can't see any difference in the posts that work and the posts that fail.
Vimeo always returns a valid $video_id to work with.
So, out of a few hundred posts, I get an error on maybe 4 or 5 posts. I've deleted these posts and added them again. Each time update_post_meta and add_post_meta fails.
Watching the MySQL log (I've enabled query logging), it doesn't even do a MySQL query when update_post_meta or add_post_meta fails.
I can't see what WP logic decides not to even query the DB on these two functions.
Incidently, add_post_meta also fails at this point aswell
$foo2 = add_post_meta(get_the_id(), 'video_vimeo_id_callback', $video_id, TRUE);
Has anyone else had issues like this before? Or know whats going on?
Thanks
Update:
Just rewrote the code to test my sanity.
<?php
require_once '../wp-blog-header.php';
require_once 'vimeo.class.php';
$vimeo = new phpVimeo(VIMEO_CONSUMER_KEY, VIMEO_CONSUMER_SECRET, VIMEO_ACCESS_TOKEN, VIMEO_ACCESS_TOKEN_SECRET);
echo '<pre>';print_r($vimeo);echo '</pre>';
$args = array('order' => 'DESC', 'post_type' => array('video_library','post'), 'status' => array('pending','published'), 'posts_per_page' => -1);
if (isset($_GET['id'])) {
$args2 = array('p' => $_GET['id'], 'status' => array('draft','pending','published'));
$args = array_merge($args,$args2);
}
echo '<pre>';print_r($args);echo '</pre>';
$the_query = new WP_Query($args);
// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();
echo '<br /><strong> ('.$post->ID.') '.get_the_title(). '</strong>';
echo '<br />';
echo 'Post Type: '.get_post_type(get_the_id()).'<br />';
if (get_post_type(get_the_id()) == 'post') {
$video_high_resolution_mp4_video_id = get_post_meta(get_the_id(),'videos_high_resolution_mp4_video', TRUE);
$video_vimeo_id = get('videos_vimeo_id');
}
elseif (get_post_type(get_the_id()) == 'video_library') {
$video_high_resolution_mp4_video_id = get_post_meta(get_the_id(),'video_high_resolution_mp4_video', TRUE);
$video_vimeo_id = get('video_vimeo_id');
}
echo 'Attachment ID: '.$video_high_resolution_mp4_video_id.'<br />';
echo 'Vimeo ID: '.$video_vimeo_id.'<br />';
if (isset($video_high_resolution_mp4_video_id)) {
$video_high_resolution_mp4_video = wp_get_attachment_url($video_high_resolution_mp4_video_id);
echo 'Attachment URL: '.$video_high_resolution_mp4_video.'<br />';
}
else {
'can't get attachment id';
}
// we have no vimeo id
if (empty($video_vimeo_id) AND !empty($video_high_resolution_mp4_video)) {
echo 'No vimeo id for this, but a high res waiting to upload <br />';
echo '**** GOING TO UPLOAD **** <br />';
$video_high_resolution_mp4_video_local = preg_replace(WP_SITEURL_RX,WP_PATH ,$video_high_resolution_mp4_video);
echo 'Local Path: '. $video_high_resolution_mp4_video_local.'<br />';
// do the upload
$video_id = $vimeo->upload($video_high_resolution_mp4_video_local);
// catch errors
//
if (isset($video_id) AND !empty($video_id)) {
echo '** Upload to Vimeo OK! <br />';
// set the info on vimeo
// $vimeo->call('vimeo.videos.setTitle', array('title' => '('.get_the_id().') '.get_the_title(), 'video_id' => $video_id));
// $vimeo->call('vimeo.videos.embed.setPreset', array('preset_id' => VIMEO_PRESET_ID, 'video_id' => $video_id));
// set the wp meta info
$update_post_meta = update_post_meta($post->ID, 'videos_vimeo_id', date('r'), "");
$update_post_meta2 = update_post_meta($post->ID, 'videos_vimeo_id_callback', date('r'), "");
$update_post_meta3 = update_post_meta($post->ID, 'videos_vimeo_id_upload_date', date('r'), "");
if ($update_post_meta == FALSE) {
echo 'update_post_meta failed';
}
else {
echo 'update_post_meta ok';
}
echo ' | ';
if ($update_post_meta2 == FALSE) {
echo 'update_post_meta failed 2';
}
else {
echo 'update_post_meta ok 2';
}
echo ' | ';
if ($update_post_meta3 == FALSE) {
echo 'update_post_meta failed 3';
}
else {
echo 'update_post_meta ok 3';
}
}
else {
echo '** Upload to Vimeo FAILED! <br />';
}
}
else {
echo '<br />Already Vimto'ed';
}
echo '<br /><a href="'.get_bloginfo('url').'/wp-admin/post.php?post='.get_the_id().'&action=edit">Edit post</a>';
echo '<hr />';
endwhile;
?>
$post-ID works and get_the_id() works fine.
I may have found the issue…
When I have this line
$video_id = $vimeo->upload($video_high_resolution_mp4_video_local);
The update_post_meta calls fail.
When I comment the above out and do
$video_id = 44444;
they work.
What makes no sense is that update_post_meta and $video_id are not currently linked together at all in this code.
wpquestions.com
-
viorelepuran
- March 7, 2018 at 6:19 am
Hello,
I created a front end form, whitch looks like this:
<?php $new_post = array( 'post_id' => 'new', 'field_groups' => array(57), 'form' => true, 'return' => '%post_url%', 'html_before_fields' => '', 'html_after_fields' => '', 'submit_value' => 'Submit Post', 'updated_message' => 'Saved!' ); acf_form( $new_post ); ?> <script type="text/javascript"> jQuery(document).ready(function($) { var ajaxUrl = "SITE_ADMIN_URL/admin-ajax.php"; $(".acf-button").on("click",function(){ // When btn is pressed. var selected_model = $("#acf-field-area option:selected").text(); if(selected_model ){ $.post(ajaxUrl, { action:"the_model", selected_model: selected_model }); } }); }); </script>
In functions.php i have added the following function:
add_filter('acf/save_post', 'add_car_model', 20); function add_car_model($post_id) { $post_type = get_post_type($post_id); if ($post_type != 'cars') { // not our post type, bail early return; } $selected_model = $_POST['selected_model']; add_post_meta($post_id, 'car_model', ''); update_post_meta($post_id, 'car_model', $selected_model); }
I have a select dropdown called Make, and based on the make, i am loading values into Model dropdown, which is custom dropdown.
Using javascript, i managed to get the correct model value(tested it using on change and alert();) but i do not know how to pass the model value into the post’s meta data.
Thank you for looking into this!
support.advancedcustomfields.com
Я попробовал ответить Даниэлю, и это не сработало для меня. Возможно, код WordPress / Woocommerce изменился с тех пор, или, может быть, я не совсем понял, как это сделать, но в любом случае этот код ничего не сделал для меня. Однако, после много работы, использующей его в качестве базы, я придумал этот фрагмент кода и поместил его в functions.php
моей темы:
function wcproduct_set_attributes($id) { $material.
// Now update the post with its new attributes update_post_meta($id, '_material', $material); } // After inserting post add_action( 'save_post_product', 'wcproduct_set_attributes', 10);
При этом я могу взять то, что я установил как «материал» на моей установке WooCommerce как пользовательский атрибут, и добавить его в формальный мета как _материал. Это, в свою очередь, позволяет мне использовать другой фрагмент кода, поэтому функция поиска WooCommerce распространяется на мета-поля, то есть я могу искать материал в поле поиска WooCommerce и отображать все элементы с этим материалом.
Надеюсь, это полезно кому-то.
code.i-harness.com
Несколько записей для одного и того же мета ключа
$values = [ 'red', 'yellow', 'blue', 'pink' ]; foreach( $values as $value ) { // This method uses `add_post_meta()` instead of `update_post_meta()` add_post_meta( $item_id, 'color', $value ); }
Теперь элемент, идентифицированный с помощью $item_id
будет иметь несколько записей для мета-ключа color
. Затем вы можете использовать
get_post_meta()
а третий параметр – false
и вы получите массив со всеми значениями:
// You don't really need the set the third parameter // because it is false vay default $colors = get_post_meta( $item_id, 'color' ); // $colors should an array with all the meta values for the color meta key var_dump( $colors );
Храните массив в одной мета-записи
В этом случае массив значений сериализуется до того, как он будет создан в базе данных:
$values = [ 'red', 'yellow', 'blue', 'pink' ]; // WordPress does this automatically when an array is passed as meta value // $values = maybe_serialize( $values ); update_post_meta( $item_id, 'color', $values );
Теперь элемент, идентифицированный с помощью $item_id
будет иметь только одну запись для мета-ключа color
; значение представляет собой сериализованную строку, представляющую исходный массив. Затем вы можете использовать get_post_meta()
, с третьим параметром, get_post_meta()
true, поскольку у вас есть только одна запись, а затем unserialize строка для возврата массива:
$colors = get_post_meta( $item_id, 'color', true ); // WordPress does this automatically when the meta value is a serialized array // $colors = maybe_unserialize( $colors ); // $colors should be an array var_dump( $colors );
Вы можете следовать одному и тому же подходу с помощью множественного числа вашей формы.
Имея только одну запись для мета-ключа:
if( ! empty( $_REQUEST['menu-item-content-multiple'][$menu_item_db_id] ) ) { $meta_field_value = $_REQUEST['menu-item-content-multiple'][$menu_item_db_id]; // $meta_field_value will be serialized automatically by WordPress update_post_meta( $menu_item_db_id, '_menu_item_content_multiple', $meta_field_value ); }
Затем вы можете использовать значение как массив:
// The value returned by get_post_meta() is unserialized automatically by WordPress $item->content_multiple = get_post_meta( $item->ID, '_menu_item_content_multiple', true );
С несколькими записями:
Концепция здесь немного отличается; у вас будет несколько записей в базе данных с одним и тем же мета-ключом, поэтому вам нужно будет использовать add_post_meta()
вместо update_post_meta()
, чтобы добавить новую запись для каждого значения.
if( ! empty( $_REQUEST['menu-item-content-multiple'][$menu_item_db_id] ) ) { $values = $_REQUEST[ 'menu-item-content-multiple' . $menu_item_db_id ]; foreach( $values as $value ) { add_post_meta( $menu_item_db_id, '_menu_item_content_multiple', $value ); } }
Теперь вы можете использовать get_post_meta()
а третий параметр – false
(это значение по умолчанию, поэтому вы можете его опустить):
$item->content_multiple = get_post_meta( $item->ID, '_menu_item_content_multiple', false );
Оба варианта в порядке, вы должны решить, какой из них лучше организовать данные в рамках вашего проекта.
Сторона примечания : вы должны выполнить некоторую сантизацию перед использованием входных данных, но я не знаю требований для вас, вот пример:
array_map( 'sanitize_text_field', wp_unslash( $_REQUEST['menu-item-content-multiple'][$menu_item_db_id] ) );
www.wordpressask.com
Я использую плагин для Woocommerce, который добавляет новый метабокс с редактируемыми полями количества чисел в админ-сервер администратора. Моя тема позволяет публиковать объявления на переднем конце, поэтому я хочу добавить некоторые из этих полей в интерфейс.
мне удалось добавить поля в моем файле шаблон с помощью:
<?php $min = get_post_meta($post->ID, '_wpbo_minimum', true); $max = get_post_meta($post->ID, '_wpbo_maximum', true); ?> <label for="_wpbo_minimum">Minimum Quantity</label> <input type="number" name="_wpbo_minimum" value="<?php echo $min; ?>" /> <label for="_wpbo_maximum">Maximum Quantity</label> <input type="number" name="_wpbo_maximum" value="<?php echo $max; ?>" />
Оба полей отображаются на моей фронтальной форме продукта редактирования и получать их значения из внутреннего интерфейса, если они были ранее заполнены .
Но теперь я борюсь с обновлением и сохранением полей с обновленными значениями от переднего конца или сохранения новых значений из переднего конца, если эти значения не были ранее заполнены.
Я провел часы п inding некоторые учебник по этому вопросу, я думаю, что я должен сосредоточиться на следующем коде:
update_post_meta($post->ID, '_wpbo_minimum', $_POST['_wpbo_minimum']); update_post_meta($post->ID, '_wpbo_maximum', $_POST['_wpbo_maximum']);
Но я не могу понять, если это правильно и где должен этот код будет помещен для того, чтобы сохранить или обновить свои поля ,
Я попытался поместить функцию в моей functions.php файл, который выглядит следующим образом:
/* Update Minimum Qty field */ add_action('save_post', 'save_min_qty'); function save_min_qty($post_id) { if(get_post_type($post_id) != "VA_LISTING_PTYPE") return; $min = get_post_meta($post->ID, '_wpbo_minimum', true); if (isset($_POST['_wpbo_minimum'])) { $min = $_POST['_wpbo_minimum']; } if(isset($_POST['_wpbo_minimum'])) { if ($min != 0) { $min = wpbo_validate_number($min); } update_post_meta( $post_id, '_wpbo_minimum', strip_tags($min) ); }
Но это просто не кажется, чтобы быть победителем.
Не могли бы вы указать мне направление вправо?
Ниже приведен код действительного исходного плагина, который создает метабокс во внутреннем интерфейсе, я не уверен, что он имеет отношение к тому, что мне нужно делать в интерфейсе, а какая часть этого и где я должен быть используя его:
<?php if (! class_exists('IPQ_Quantity_Meta_Boxes')) : class IPQ_Quantity_Meta_Boxes { public function __construct() { add_action('save_post', array($this, 'save_quantity_meta_data')); } /* Handle Saving Meta Box Data */ public function save_quantity_meta_data($post_id) { // Validate Post Type if (! isset($_POST['post_type']) or $_POST['post_type'] !== 'product') { return; } // Validate User if (!current_user_can('edit_post', $post_id)) { return; } // Verify Nonce if (! isset($_POST["_wpbo_product_rule_nonce"]) or ! wp_verify_nonce($_POST["_wpbo_product_rule_nonce"], plugin_basename(__FILE__))) { return; } // Update Rule Meta Values if (isset($_POST['_wpbo_minimum'])) { $min = $_POST['_wpbo_minimum']; } if(isset($_POST['_wpbo_minimum'])) { if ($min != 0) { $min = wpbo_validate_number($min); } update_post_meta( $post_id, '_wpbo_minimum', strip_tags($min) ); } /* Make sure Max > Min */ if(isset($_POST['_wpbo_maximum'])) { $max = $_POST['_wpbo_maximum']; if (isset($min) and $max < $min and $max != 0) { $max = $min; } update_post_meta( $post_id, '_wpbo_maximum', strip_tags(wpbo_validate_number($max)) ); } } } endif;
stackoverrun.com
WordPress пытается как можно больше сократить количество запросов к базе данных.
Например, в любое время, когда вы получаете мета-поле или поле таксономии, перед запросом базы данных WordPress выглядит, если это уже запрошено и хранится в кеше, и возвращает его туда вместо запроса в базу данных.
«Задача кэша» выполняется с помощью WP_Object_Cache
и wp_cache_*
функции (которые являются оберткой для методов этого класса.)
По умолчанию «кеш» — это не что иное, как глобальная переменная PHP. Это означает, что он находится в памяти, но также означает, что он исчезает по каждому запросу.
Однако через dropins (advanced-cache.php
и /или object-cache.php
)) можно настроить собственный способ обработки этого кеша.
Обычно эти кавычки используются для настройки какого-то механизма кэширования, который «выживает» в особых запросах.
По этой причине среди людей WP они известны как плагины «постоянного кэша» (даже если за пределами пузыря слова «кеш» и «постоянный» не имеют большого смысла).
Популярные варианты сегодня Memcached или Redis .
Таким образом, используя плагины «постоянного кэша», вы можете резко сократить количество запросов к базе данных, поскольку кэш не обновляется по каждому запросу.
$foo = get_post_meta('foo', $post_id, true); // a lot of code in the middle $bar = get_post_meta('bar', $post_id, true);
2 строки кода выше будут вызывать максимум 1 запрос к базе данных.
Фактически, когда вы запрашиваете настраиваемое поле, все поля для этой записи извлекаются из базы данных, кэшируются через кеш объектов, а последующие запросы извлекают данные из кеша, а не из db.
То же самое происходит для терминов таксономии, WordPress один раз вытягивает все термины для таксономии, а затем возвращает их из кеша.
Кэш объектов очень широко используется в WordPress. Не только для сообщений, метазначений и таксономий, но также для пользователей, комментариев, данных темы …
Когда вы запрашиваете некоторые сообщения через WP_Query
, по умолчанию WordPress не только извлекает их из базы данных (или из кеша, если они кэшированы), но также обновляет кеш для всех настраиваемых полей и все таксономии , связанные с поднятыми сообщениями.
Поэтому, когда вы вызываете, например, get_the_terms()
или get_post_meta()
, в то время как записи циклов, полученные через WP_Query
, вы не фактически запускать любой запрос базы данных, но извлекать информацию из кеша.
Хорошо, да, но это связано со стоимостью.
Обновление кеша «магия», которое делает WordPress, когда вытягивает сообщения через WP_Query
, происходит в update_meta_cache для мета и update_meta_cache
для таксономий.
Если вы посмотрите на исходный код этих функций, вы увидите, что WordPress выполняет только один запрос db в каждой функции, но также выполняет большую обработку. Например, в update_object_term_cache
есть 7 вложенных update_object_term_cache
… если у вас много таксономий, а число сообщений на странице велико, это не очень хорошо.
Что такое WP_Query
и 'update_post_meta_cache'
, если установлено 'update_post_term_cache'
, чтобы предотвратить обновление WordPress для пользовательских полей и таксономии, соответственно.
Вв этом случае при первом запросе пользовательского поля или таксономии запускается запрос базы данных, а данные кэшируются.
Как обычно, ответ зависит от . Большую часть времени, чтобы установить эти значения в false
, является хорошим выбором, поскольку он предотвращает ненужную обработку и запросы к базе данных, если это не требуется, и кеш обновляется в любом случае, когда требуются пользовательские условия поля /таксономии .
Однако, если вы собираетесь вызывать, даже однажды, false
во время цикла, и вы собираетесь называть get_post_meta()
для всех (или большинства) таксономий, поддерживаемых сообщениями, то обновление кэша в любом случае запускается, и не может быть никакой реальной выгоды при настройке этих аргументов запроса на get_the_terms()
.
sprosi.pro
Произвольные поля в админке
Итак, пошагово:
- Переходим на страницу редактирования или создания нового поста.
- Прокручиваем вниз до блока «Произвольные поля».
В версии WordPress 3.1 и выше этот блок может быть скрыт. Включите его в настройках экрана (о том как — читайте далее).
- Укажите имя (вы можете выбрать из списка один из уже используемых ключей либо ввести новый) и его значение и нажмите «Добавить произвольное поле».
Что делать, если в админке их нет?
В первую очередь проверьте «Настройки экрана» — галочка напротив «Произвольные поля» должна быть отмечена.
Если же в настройках экрана вы ничего подобного не нашли, то вероятнее всего тип поста, с которым вы работаете, не поддерживает использование произвольных полей — это легко поправимо при помощи add_post_type_support(). Код для functions.php
:
Типы постов page
(страницы) и post
(записи) имеют поддержку произвольных полей по умолчанию!
Как вывести произвольные поля
1. the_meta()
Функция позволяет вывести все произвольные поля текущего поста в виде маркированного списка <ul>
. Например для нашего случая код:
Выведет:
Параметров у функции нет.
2. get_post_meta()
Про get_post_meta()
я уже подробно писал здесь.
3. get_post_custom()
Возвращает многоуровневый массив всех произвольных полей для текущего поста или поста, ID которого указан в параметрах функции.
Получим что-то вроде этого:
В отличие от функции the_meta()
, get_post_custom()
возвратит также и все скрытые произвольные поля поста.
4. get_post_custom_keys()
Функция возвращает массив ключей всех произвольных полей поста.
Выдаст:
Является производной от get_post_custom()
, а если быть точным, то просто пропускает её результат через php-функцию array_keys()
.
5. get_post_custom_values()
Возвращает один из ключей функции get_post_custom()
в виде массива, вне зависимости от количества аргументов.
Первый параметр функции обязателен (если вы его не укажите, будет возвращено null
).
Как изменять значения произвольных полей
Ну во-первых, вы можете добавлять и изменять их через админку (об этом было написано выше). Во-вторых, для этих целей существует несколько функций.
1. update_post_meta()
Либо обновляет значение указанного произвольного поля, либо добавляет новое, если его не существует.
- $post_id
- (целое число) ID поста, метаданные которого нужно изменить.
- $meta_key
- (строка) ключ.
- Если пост содержит несколько значений для одного и того же ключа, то, если не указан параметр
$prev_value
, будет обновлено первое найденное значение. - Если пост вообще не содержит метаданых с указанным ключом, тогда они будут добавлены.
- Если пост содержит несколько значений для одного и того же ключа, то, если не указан параметр
- $meta_value
- (целое число|строка|массив) устанавливаемое значение.
- $prev_value
- (целое число|строка|массив) предыдущее значение параметра.
Пример:
2. add_post_meta()
Добавляет метаданные для указанного поста.
Последний параметр функции позволяет указать, нужно ли добавлять метаданные в том случае, если произвольное поле с указанным ключом уже имеется в базе данных:
false
— нужно (стоит по умолчанию),true
— не нужно, ключ должен быть уникален.Предположим, что наш товар может иметь только один размер, поэтому второе произвольное поле с ключом
size
добавлено не будет.
3. delete_post_meta()
Удаляем метаданные для указанного в параметрах поста.
На случай, если метаданных с указанным ключом несколько, а нужно удалить только одно, конкретное, в третьем параметре функции можно указать, какое именно значение указанного ключа нужно удалить.
Фильтр, поиск и сортировка по произвольным полям
Про это уже написан целый пост, вы можете найти его по этой ссылке.
Произвольные поля для рубрик и меток
Сам по себе WordPress не имеет поддержки метаданных для таксономий (рубрик, меток и пр.), но в этом вам может помочь плагин Meta for taxonomies.
misha.blog
/** * Runs on plugin activations * - Transfer any settings which may have been set in the Lite version of the plugin * - Creates a post type 'mc4wp-form' and enters the form mark-up from the Lite version */ function mc4wp_pro_install() { // check if PRO option exists and contains data entered by user $pro_options = get_option('mc4wp', false); if ($pro_options !== false) { return false; } $default_options = array(); $default_options['general'] = array('api_key' => '', 'license_key' => ''); $default_options['checkbox'] = array('label' => 'Sign me up for the newsletter!', 'precheck' => 1, 'css' => 0, 'show_at_comment_form' => 0, 'show_at_registration_form' => 0, 'show_at_multisite_form' => 0, 'show_at_buddypress_form' => 0, 'show_at_edd_checkout' => 0, 'show_at_woocommerce_checkout' => 0, 'show_at_bbpress_forms' => 0, 'lists' => array(), 'double_optin' => 1, 'send_welcome' => 0); $default_options['form'] = array('css' => 0, 'custom_theme_color' => '#1af', 'ajax' => 1, 'double_optin' => 1, 'update_existing' => 0, 'replace_interests' => 1, 'send_welcome' => 0, 'text_success' => 'Thank you, your sign-up request was successful! Please check your e-mail inbox.', 'text_error' => 'Oops. Something went wrong. Please try again later.', 'text_invalid_email' => 'Please provide a valid email address.', 'text_already_subscribed' => 'Given email address is already subscribed, thank you!', 'redirect' => '', 'hide_after_success' => 0, 'send_email_copy' => 0); $lite_settings = array('general' => (array) get_option('mc4wp_lite'), 'checkbox' => (array) get_option('mc4wp_lite_checkbox'), 'form' => (array) get_option('mc4wp_lite_form')); foreach ($default_options as $group_key => $options) { foreach ($options as $option_key => $option_value) { if (isset($lite_settings[$group_key][$option_key]) && !empty($lite_settings[$group_key][$option_key])) { $default_options[$group_key][$option_key] = $lite_settings[$group_key][$option_key]; } } } // Transfer form from Lite, but only if no Pro forms exist yet. $forms = get_posts(array('post_type' => 'mc4wp-form', 'post_status' => 'publish')); if (false == $forms) { // no forms found, try to transfer from lite. $form_markup = isset($lite_settings['form']['markup']) ? $lite_settings['form']['markup'] : "<p>nt<label for="mc4wp_email">Email address: </label>nt<input type="email" id="mc4wp_email" name="EMAIL" required placeholder="Your email address" />n</p>nn<p>nt<input type="submit" value="Sign up" />n</p>"; $form_ID = wp_insert_post(array('post_type' => 'mc4wp-form', 'post_title' => 'Sign-Up Form #1', 'post_content' => $form_markup, 'post_status' => 'publish')); $lists = isset($lite_settings['form']['lists']) ? $lite_settings['form']['lists'] : array(); update_post_meta($form_ID, '_mc4wp_settings', array('lists' => $lists)); update_option('mc4wp_default_form_id', $form_ID); } // store options update_option('mc4wp', $default_options['general']); update_option('mc4wp_checkbox', $default_options['checkbox']); update_option('mc4wp_form', $default_options['form']); }
hotexamples.com