// css - .open_mobile_sub .menu-depth-0{display:block;}
jQuery(this).toggleClass('open_mobile_sub');//то, что Вы пытаетесь сделать. только класс даем родителю
//через тег a (ссылка), а не тег li (класс dropdown)
jQuery(this).toggleClass('open_mobile_sub').next().slideToggle(); //fadeToggle()
//open_mobile_sub - для стилизации открытого пункта
//next().slideToggle() - будет открывать/закрывать
//либо
jQuery(this).next().toggleClass('open_mobile_sub');
//open_mobile_sub - прописываем открытие в стилях
//либо просто
jQuery(this).next().slideToggle(); //fadeToggle()
jQuery(document).ready(function() {
jQuery('.dropdown a[href*="javascript"]:not([href*="http"])').click(function() {// :not([href*="http://"],[href*="https://"])
jQuery(this).next().slideToggle();
});
});
<ul class="sub-menu menu-depth-0">
<li id="menu-item-473" class="dropdown drop-8 menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-473">
<a href="javascript:void(0);">Одежда</a>
<ul class="sub-menu menu-depth-0">
jQuery(document).ready(function() {
jQuery('.dropdown a[href*="javascript"]:not([href*="http"])').click(function() {// :not([href*="http://"],[href*="https://"])
jQuery(this).next().toggleClass('open_mobile_sub');
});
});
Почему в моб.версии меню при клике появляются все субменю?
jQuery('.menu-depth-0 ')
Но помечу то костомайзер мне не зашел, возможно мало времени ему уделил
А с точки зрения базы данных, информация храниться так же postmeta или нет ?
Warning: strtotime() expects at least 1 parameter, 0 given in
if(strtotime($act_until)>strtotime()) {
if(strtotime($act_until)>strtotime( где параметры? - ошибка )) {
$items='<ul>';$can_reg=get_option('users_can_register');
if(is_user_logged_in()){
//$items.='<li><a href="/wp-admin/">'.__('Ваш профиль','VAB').'</a></li>';//раскомментируйте и отправте пользователя туда куда Вам нужно, если он авторизован
$items.='<li><a href="'.wp_logout_url().'">'.__('Выйти','VAB').'</a></li>';
}elseif(!is_user_logged_in()){
$items.='<li><a href="'.wp_login_url().'">'.__('Вход','VAB').'</a></li>';
$items.=!empty($can_reg)?'<li><a href="'.wp_registration_url().'">'.__('Регистрация','VAB').'</a></li>':'';
}
echo $items.'</ul>';
$items='<ul>';$can_reg=get_option('users_can_register');
if(is_user_logged_in()){
//$items.='<li><a href="/wp-admin/">'.__('Ваш профиль','VAB').'</a></li>';//раскомментируйте и отправте пользователя туда куда Вам нужно, если он авторизован
$items.='<li><a href="'.wp_logout_url().'">'.__('Выйти','VAB').'</a></li>';
}elseif(!is_user_logged_in()){
$items.='<li><a href="'.wp_login_url().'">'.__('Вход','VAB').'</a></li>';
if(!empty($can_reg)){
$items.='<li><a href="'.wp_registration_url().'">'.__('Регистрация','VAB').'</a></li>';
}
}
echo $items.'</ul>';
add_filter('wp_nav_menu_items'
$items='';
if(is_user_logged_in()){
//$items.='<li><a href="/wp-admin/">'.__('Ваш профиль','VAB').'</a></li>';//раскомментируйте и отправте пользователя туда куда Вам нужно, если он авторизован
$items.='<li><a href="'.wp_logout_url().'">'.__('Выйти','VAB').'</a></li>';
}
elseif(!is_user_logged_in()){
$items.='<li><a href="'.wp_login_url().'">'.__('Вход','VAB').'</a></li>';
$items.='<li><a href="'.wp_registration_url().'">'.__('Регистрация','VAB').'</a></li>';
}
echo $items;
Добавление и работа с полями юзеров
я хочу дать пользователем новые поля
if(!function_exists('My_user_fields')){
function My_user_fields($user){
global $pagenow;if($pagenow=='profile.php'||$pagenow=='user-edit.php'){
...//добавляем поля (можно добавить и nonce поля хотя они есть по умолчанию)
}}}
add_action('show_user_profile','My_user_fields');
add_action('edit_user_profile','My_user_fields');
if(!function_exists('save_My_user_fields')){
function save_My_user_fields($user_id){
...//если добавили nonce поля, проверяем их
...//проверяем и сохраняем поля get_the_author_meta()
}}
add_action('personal_options_update','save_My_user_fields');
add_action('edit_user_profile_update','save_My_user_fields');
if(!function_exists('My_add_error')){
function My_add_error(){
...//можем добавить свой эрор (например get_transient (устанавливаем при проверке полей и сохранением set_transient))
}}}
add_action('load-user-edit.php','My_add_error');
add_action('load-profile.php','My_add_error');
//пишем свой акшн функцию и в нужном месте выводим do_action('my_author_info');
if(!function_exists('my_arhive_author_info')){function my_arhive_author_info(){
$author=get_user_by('id',get_query_var('author'));
...
}}
add_action('my_author_info','my_arhive_author_info',10);
define('DISABLE_WP_CRON',true);
add_action('wp','cron_activation');
if(!function_exists('cron_activation')){function cron_activation(){
$location=get_theme_mod('VAB_Weather_Location');
if(!wp_next_scheduled('Weather_next_event')&&!empty($location)){wp_schedule_event(time(),'five_min','Weather_next_event');}
if(wp_next_scheduled('Weather_next_event')&&empty($location)){wp_unschedule_hook('Weather_next_event');}
}}
add_action('Weather_next_event','do_Weather_next');
if(!function_exists('do_Weather_next')){function do_Weather_next(){
$location=get_theme_mod('VAB_Weather_Location');$location=sanitize_title($location);$VABweather=get_transient($location);
if(empty($VABweather)){VAB_Weather::set_trans($location);}}}
И там же(в опциях) изменяемый период, в соответствии с которым нужно "кронить"..
get_transient() set_transient()
). При истекшем сроке временной опции крон его запустит асинхронно. Но это не на 100% поможет так как крон запускается при каком - либо действие на сайте. Т.е. кто-то может читать статью и крон незаметно отработает скрипт, либо кто-то будет открывать страницу сайта и крон запустится в этот момент (тут будет Ваше подвисание). Таким образом, если set_transient выставлена на сутки, то это подвисание может появиться, а может и нет, раз в сутки у кого-то из толпы. Но, если есть возможность использовать планировщик виндовс, например (т.е. у Вас, к примеру, сайт на своем серваке), отключить wp-cron (крон вордпресс define('DISABLE_WP_CRON', true);
) и запускать его (wp-cron.php) через планировщик виндовс, скажем через каждые пять минут, что я думаю и имел в виду FanatPHP, ... is_front_page() && is_home()
т.е. условие сработает только если у вас выбрана опция в настройках вордпресс - «На главной странице отображать» -> «Ваши последние записи»is_front_page() || is_home()//или is_front_page или is_home
// $yourObject=get_site_transient('update_core');
$yourObject=get_option('_site_transient_update_core');
$array=(array)$yourObject;
$arrayTwo=(array)$array['updates'][0];
// echo($arrayTwo['response']);
echo $arrayTwo['response']=='upgrade'?'(_!_)':'(⌒‿⌒)';
это уведомление может быть не явным текстом
echo $wp_version;
а вот какая актуальная это совсем другое дело...var_dump(get_option('_site_transient_update_core'));
// get_site_transient('update_core');
object(stdClass)#4132 (4) { ["updates"]=> array(1) { [0]=> object(stdClass)#4131 (10) { ["response"]=> string(6) "latest" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.1.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4130 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.1.zip" ["no_content"]=> string(0) "" ["new_bundled"]=> string(0) "" ["partial"]=> string(0) "" ["rollback"]=> string(0) "" } ["current"]=> string(5) "5.6.1" ["version"]=> string(5) "5.6.1" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" } } ["last_checked"]=> int(1613826409) ["version_checked"]=> string(5) "5.6.1" ["translations"]=> array(0) { } }
object(stdClass)#4003 (4) { ["updates"]=> array(9) { [0]=> object(stdClass)#4051 (10) { ["response"]=> string(7) "upgrade" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.1.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4048 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.1.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.6.1" ["version"]=> string(5) "5.6.1" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" } [1]=> object(stdClass)#4002 (10) { ["response"]=> string(7) "upgrade" ["download"]=> string(59) "https://downloads.wordpress.org/release/wordpress-5.6.1.zip" ["locale"]=> string(5) "en_US" ["packages"]=> object(stdClass)#4001 (5) { ["full"]=> string(59) "https://downloads.wordpress.org/release/wordpress-5.6.1.zip" ["no_content"]=> string(70) "https://downloads.wordpress.org/release/wordpress-5.6.1-no-content.zip" ["new_bundled"]=> string(71) "https://downloads.wordpress.org/release/wordpress-5.6.1-new-bundled.zip" ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.6.1" ["version"]=> string(5) "5.6.1" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" } [2]=> object(stdClass)#4061 (11) { ["response"]=> string(10) "autoupdate" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.1.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4054 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.1.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.6.1" ["version"]=> string(5) "5.6.1" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" ["new_files"]=> string(1) "1" } [3]=> object(stdClass)#4053 (11) { ["response"]=> string(10) "autoupdate" ["download"]=> string(63) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4052 (5) { ["full"]=> string(63) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.6.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(3) "5.6" ["version"]=> string(3) "5.6" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" ["new_files"]=> string(1) "1" } [4]=> object(stdClass)#3984 (11) { ["response"]=> string(10) "autoupdate" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.5.3.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4004 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.5.3.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.5.3" ["version"]=> string(5) "5.5.3" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" ["new_files"]=> string(1) "1" } [5]=> object(stdClass)#4005 (11) { ["response"]=> string(10) "autoupdate" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.5.2.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4006 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.5.2.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.5.2" ["version"]=> string(5) "5.5.2" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" ["new_files"]=> string(1) "1" } [6]=> object(stdClass)#4007 (11) { ["response"]=> string(10) "autoupdate" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.4.4.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4008 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.4.4.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.4.4" ["version"]=> string(5) "5.4.4" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" ["new_files"]=> string(1) "1" } [7]=> object(stdClass)#4009 (11) { ["response"]=> string(10) "autoupdate" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.3.6.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4066 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.3.6.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.3.6" ["version"]=> string(5) "5.3.6" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" ["new_files"]=> string(1) "1" } [8]=> object(stdClass)#4069 (11) { ["response"]=> string(10) "autoupdate" ["download"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.2.9.zip" ["locale"]=> string(5) "ru_RU" ["packages"]=> object(stdClass)#4070 (5) { ["full"]=> string(65) "https://downloads.wordpress.org/release/ru_RU/wordpress-5.2.9.zip" ["no_content"]=> bool(false) ["new_bundled"]=> bool(false) ["partial"]=> bool(false) ["rollback"]=> bool(false) } ["current"]=> string(5) "5.2.9" ["version"]=> string(5) "5.2.9" ["php_version"]=> string(6) "5.6.20" ["mysql_version"]=> string(3) "5.0" ["new_bundled"]=> string(3) "5.6" ["partial_version"]=> string(0) "" ["new_files"]=> string(1) "1" } } ["last_checked"]=> int(1613826187) ["version_checked"]=> string(5) "5.1.8" ["translations"]=> array(0) { } }
add_action('wp_nav_menu_item_custom_fields' - для добавления полей
wp_enqueue_media();
(т.е. Вам надо искать скрипт). Добавлять-то Вы через библиотеку желаете, я думаю. Может у Вас есть что-то из примеров в закладках?
информация попадается, но пока не попалось примеров с картинкой или видео
<script type="text/javascript">
jQuery(document).ready(function($){
function MediaButtonFunction(){
$('.MediaButton').click(function(e){
e.preventDefault();
var Media_type;
if($(this).hasClass('Media_Img')){
Media_type='image';
}else if($(this).hasClass('Media_Audio')){
Media_type='audio';
}
var $upload_button=$(this),custom_uploader=wp.media.frames.file_frame=wp.media({title:'<?php _e('Выбрать/Загрузить медиафайл','VAB');?>',library:{type:[Media_type]},button:{text:'<?php _e('Выбрать','VAB');?>'},multiple:false});
custom_uploader.open();
custom_uploader.on('select',function(){
// метод state() определяет текущее состояние объекта first() создает новый объект
var attachment=custom_uploader.state().get('selection').first().toJSON();///возвращается как объект выделеный файл
$upload_button.siblings('textarea').val(attachment.url);});});
}
MediaButtonFunction();
});
</script>
var attachment=custom_uploader.state().get('selection').first().toJSON();
$upload_button.siblings('textarea').val(attachment.url);
if(!function_exists('vab_menu_custom_fields')){function vab_menu_custom_fields($item_id,$item){$Noalt=__('Атрибут alt не заполнен','VAB');?>
<script type="text/javascript">jQuery(document).ready(function($){function MediaButtonFunction(){$('.MediaButton<?php echo$item_id;?>').click(function(e){
...
</script>
...
<input type="button" class="MediaButton<?php echo$item_id;?> Media_Img" value="<?php _e('Библиотека изображений','VAB');?>">
<input type="button" class="MediaButton<?php echo$item_id;?> Media_Video" value="<?php _e('Библиотека видео','VAB');?>">
...
<?php }}add_action('wp_nav_menu_item_custom_fields','vab_menu_custom_fields',10,2);
<?php echo $item_id;?>
wp_enqueue_style('wp-color-picker');wp_enqueue_script('wp-color-picker');
add_filter('walker_nav_menu_start_el'
+ css / js ... все зависит от задачи
2. Создаете новый тип записи(если надо и таксономии)
3. Определяете для роли права:
из консоли убираете все ненужное и разрешаете пользователю создавать посты в кастомном типе(можно через модерацию) с возможностью редактировать только свое(админу все права)
4. Каждый новый зарегавшийся получает эту роль и видит в личном кабинете только то, что вы разрешили в 3 пункте