• Как включить автозаполнение полей при повторном комментировании?

    Функция wp_get_current_commenter присутствует в wp-includes/comment.php, но это ничего не меняет


    её наличия мало в wp-includes/comment.php
    тут надо смотреть как оформлены комментарии в теме
    некоторые темы даже могут не поддерживать фильтры и акшины вордпресс для добавления/изменений полей в форме комментариев
  • Добавить дополнительное поле в форму регистрации wordpress?

    hypero, на странице профиля пользователя проверяйте наличие данных и вставляйте, иначе при редактировании других данных на странице, поле очистится. а на странице регистрации, разумеется, пустое значение value
  • Добавить дополнительное поле в форму регистрации wordpress?

    hypero,
    если у Вас не работает, значит мешает какой-то сторонний код

    spoiler

    61741baf93784510706302.jpeg
  • Добавить дополнительное поле в форму регистрации wordpress?

    hypero,
    if ( isset( $_POST['r_register-submit'] )) {


    это что такое?

    документацию читайте

    100% рабочий вариант

    add_action('register_form','reg_show_fields',10,1);
    if(!function_exists('reg_show_fields')){function reg_show_fields(){
    	echo'<input name="user_sex" type="text" class="input" value=""/>';
    }}
    add_action('user_register','my_user_registration');
    function my_user_registration( $user_id ) {
    	// $_POST['user_sex'] проверена заранее...
    	update_user_meta($user_id,'user_sex',$_POST['user_sex']);
    }


    если у Вас не работает, значит мешает какой-то сторонний код
  • Добавить дополнительное поле в форму регистрации wordpress?

    hypero, ну так сохраняйте в мета пользователя при регистрации, а затем выводите на странице пользователя:
    add_action('show_user_profile','функция, в которой добавляем поля');
    add_action('edit_user_profile','функция, в которой добавляем поля');
    
    add_action('personal_options_update','функция обработчик');
    add_action('edit_user_profile_update','функция обработчик');
  • Как добавить иконку в кнопку adminbar Wordpress?

    Александр Соболев,
    .dashicons-microphone::before{font-size:15px;margin-top:7px;}

    61694e800acf5050535433.jpeg

    подвигайте стили прям в инженерной панели - найдете рычаг
    быть может #wpadminbar .dashicons-microphone::before
    возможно + !important
    мало ли Ваши стили какие-нибудь будут мешать...
  • Добавление динамически опций в настройки плагина WordPress?

    смотрите примеры
    По Вашему коду не получится, что-то конкретное сказать. ибо много не известного
    напрмер что это .static::analytical_papers.$permitted_chars. и что оно возвращает при каждом нажатии копки «добавить пункт». одно известно точно. Находясь на странице и кликнув дважды на добавить у Вас все данные будут одинаковыми $permitted_chars
    а так же откуда черпает данные do_settings_sections?



    грубо предположим

    добавляем нужную разметку в скрипте по клику

    ...
    
    <textarea cols="44" rows="1" placeholder="<?php esc_html_e('Сформулируйте вопрос','VAB');?>" name="theme_settings[VAB_Diagramm]['+keyq+'][question]" value=""required></textarea>
    
    ...


    затем в тегах формы Вы должны проверить в базе сохраненные данные и вывести с той же или с иной разметкой

    if(бла бла бла){
    foreach(VABMoD('VAB_Diagramm') as $k=>$v){
    ...
    
    <textarea cols="44" rows="1" placeholder="'.esc_html__('Сформулируйте вопрос','VAB').'" name="theme_settings[VAB_Diagramm]['.$k.'][question]" value="" required="">'.VABMoD('VAB_Diagramm')[$k]['question'].'</textarea>
    
    ...
    }


    собственно где у Вас это учитывается?

    do_settings_sections не создает сам инпуты при наличии опций со значениями в базе. он в описанной разметке только данные подставляет при их наличии. откуда эта функция должна знать, что какое-то значение надо в текстарею положить, а другую в тип текст?

    И поскольку Вы выбрали путь через do_settings_sections, Вам надо описать add_settings_field, указав при этом калбак функцию, в которой запилите этот форыч с проверкой данных в базе в виде массив(ключ - значение)...
  • Подключение jquery wordpress штатно?

    Михаил Лебедев, Ваше подключение бесполезно wp_enqueue_script( 'jquery' );. Он уже подключен по умолчанию, как Вы и написали сами же. Вы только лишний раз заставляете проверить подключен ли скрипт. Если не работает, то проблема в Вашем коде или совместимости с подключенной версией.
    попробуйте просто обернуть:
    jQuery(document).ready(function($){
    const $window = $(window);
    
    $window.on('scroll', onScroll);
    
    function onScroll() {
      if($window.scrollTop() >= $window.height()) {
        document.querySelector(".home .site-header").classList.add("shadow");
      } else {
        document.querySelector(".home .site-header").classList.remove("shadow");
      }
    }
    });/*Конец Ready*/
  • Как вывести ссылки и заголовки соседних страниц?

    1 Получить текущий пост с его данными global $post;
    2 Получить его дату, например, через get_the_time
    3 сформировать массив для запроса в базу (для date_query)
    4 создать 2 запроса согласно документации с использованием date_query, в который ляжет ранее полученный массив.
    - один запрос get_posts получаете записи в нужном количестве до текущей даты, второй после текущей даты
    5 оформляете их через foreach
  • Метабокс отображения всех комментариев поста на страницу "Редактировать комментарий" в WordPress не работает, почему?

    Ysery,
    А может существует возможность извлечь из WP_Comment класс WP_Post?

    не знаю. думаю проще и быстрее набросать свое, в данном случае, чем искать ответ на этот вопрос. По сути нужна только кнопка на редактирование каждого коммента и она есть, а оттуда все вытекает. Все зависит от того, что именно Вам нужно от того функционала. Если кнопки редактировать хватит и разметки, то точно нет смысла искать ответ на этот вопрос. Разве что только нужно будет подумать, при необходимости, над подгрузкой и редактированием без перезагрузки. а вот в плане визуального оформления вовсе не вижу никаких проблем, кроме как, не желание писать код html и css...
  • Метабокс отображения всех комментариев поста на страницу "Редактировать комментарий" в WordPress не работает, почему?

    Ysery, Есть стандартный шаблон комментариев в каждой теме (можно посмотреть какие там используются функции). И в интернете на эту тему много всего. Посмотрите, почитайте. Ну и самое важное (я уже писал) - у Вас все перед глазами. Речь о var_dump($mass) в цикле. смотрите, вникайте, гуглите, разберитесь с функциями. вырисовывайте нужную Вам разметку. данные родительского комментария по сути тоже есть var_dump(get_comment($mass->comment_parent))
    Налепил для примера

    function my_post_comment_meta_box( $comment ) {
        $total=get_comments(
            array(
                'post_id'=>$comment->comment_post_ID,
    						'order'=>'ASC',
            )
        );
    		?><ol class="commentlist"><?php
        foreach($total as $mass){
          // var_dump($mass);
    			echo'<br><br>';
    			if(!empty($mass->comment_parent)){echo'<ul>';
    				// var_dump(get_comment($mass->comment_parent));
    				$comment_parent=get_comment($mass->comment_parent);
    				$ParcomId=$comment_parent->comment_ID;
    				echo 'Ответ на комментарий автора комментария с ID = '.$ParcomId.', данные которого берем из var_dump(get_comment($mass->comment_parent)):';
    			}
    			?>
    			<li class="" id="li-comment-<?php echo $mass->comment_ID;?>">
    				<div id="comment-<?php echo $mass->comment_ID;?>">
    					<div class="comment-author vcard">
    					<div class="comment-meta commentmetadata" style="float:right;">
    						<div class="commentEdit"><?php echo '<a href="'.get_site_url().'/wp-admin/comment.php?action=editcomment&c='.$mass->comment_ID.'">'.esc_html__('Редактировать','VAB').'</a>';?></div>
    					</div><?php
    			if(count_user_posts($mass->user_id)>0){$Text='';if(!empty(get_author_posts_url($comment->user_id))){$Text=esc_html__('Архив автора','VAB').' / ';}$LinkSt='<a href="'.get_author_posts_url($comment->user_id).'">'.$Text;$LinkEnd='</a>';}else{$LinkSt='';$LinkEnd='';}
    			printf('%1$s '.esc_html__('в','VAB').' %2$s',get_comment_date("l, F jS, Y",$mass->comment_ID),get_comment_date("H:i:s",$mass->comment_ID));
    			
    			printf(' <cite class="fn">'.$LinkSt.'%s'.$LinkEnd.'</cite><span class="says"> '.esc_html__('пишет','VAB').':</span>',get_comment_author_link($mass->comment_ID));
    			comment_text($mass->comment_ID);?></div>
    				</div><?php
    			if(!empty($mass->comment_parent))echo'</ul>';
        }
    		?></ol><?php	
    		
    }


    Как Вы все это оформите зависит только от Вас и от Вашего желания искать, читать, понимать...

    614d507a0b34e312775460.png

  • Как изменить часовой пояс по умолчанию для будущих сайтов WordPress Multisite?

    Дополню...
    если речь об общей настройки (скажем, глобальной), лучше делать это до загрузки WordPress на уровне сервера. хотя бы через htaccess php_value date.timezone 'Europe/Samara'
    главное не писать так, например, в functions.php (глобально), иначе получим критическую ошибку в движке. это можно увидеть в админке (Пункт меню «Здоровье сайта»)
    Часовой пояс PHP по умолчанию изменён после загрузки WordPress вызовом функции date_default_timezone_set(). Это может повлиять на корректный расчёт значений даты и времени.

    ну а, если в каких-то функциях, то вполне и date_default_timezone_set сойдет.

    Где именно вы хотите изменить время?


    Хороший вопрос)))

    добавлю ещё пару:

    Вы заглядывали в настройки? Быть может этого будет достаточно?
    spoiler


    61482064a468c688031190.png

  • Есть вариант обойти попадание в спам писем отправленных с помощью wp_mail без создания почты?

    То, что написал Fenix957, не совсем верно...
    1. MX, DKIM, SPF, DMARC, PTR - самое важное и нужное. Не важно свой сервер или корпоративный. Но не факт. что в данном случае поможет Вам. Многое зависит от конфигурации сервера.
    2. Только доменную не иначе
    3. Надо брать либо его почту, либо создать для него новую ибо к ней будет привязка на подтверждение прав доменом и управление
    4. не получится
    5. phpMailer есть из коробки в вордпресс. надо только подключиться (т.е. формы надо писать не через wp_mail, а через майлер, проходя аутентификацию)
    типо:
    spoiler
    // Создаем письмо
    $mail = $phpmailer;
    $mail->isSMTP();                   // Отправка через SMTP
    ...

    ну а теперь по подробнее...

    ресурсные записи на масс хостинге могут не помочь. Например рег.ру. если Вы все идеально настроите, то рано или поздно Вы получите блок - да. Но не потому, что Вы отправили
    30-90 писем
    . Хотя лимиты разумеется есть. А потому, что с каждым отправленным Вами письмом Вы будете терять авторитет домена, которого у Вас итак нету. Даже в документации яндекса написано (нет под рукой ссылки) не прямым текстом, но! создав корпоративную почту, её надо «прокачивать», если начнете массово сразу слать письма, через пару писем уже в бан залетите. и пока вы не авторизуетесь в браузере в этой почте и с нее не отправите письмо ручками, блокировка не будет снята (проверено). По мере пользования ситуация будет улучшаться. Почему Вы будете терять авторитетность почты с каждым отправленным письмом? Все просто. Отправьте письмо и посмотрите служебные заголовки письма. Там будет реальный отправитель: что-то похожее на webmaster@server171.hosting.reg.ru. Ну а теперь подумайте вы отправляете письма с домена info@site.ru (и на него настроены ресурсные записи), а реальный отправитель hosting.reg.ru. Сами теперь скажите будете терять авторитет домена? вся фишка в конфигурации сервера. если Мы ставим на винде свой сервак мы можем поставить программу sendmail под каждый домен на этом серваке и настроить аутентификацию в sendmail.ini. на линукс, например, ssmtp. Суть в том, что нужна аутентификация. Так вот на рег.ру единственный способ полноценно отправлять письма это плагин (недели две, в свое время, вел активно переписку по этому вопросу с ребятами рег ру и яндекса т.к. не было зеленого замка на яндексе и на финале ребята рег ру ответили - «Простите, но у Вас один вариант это плагин», а по началу вовсе мазались. мол это проблемы на яндексе...), который будет проходить аутентификацию на сервере и оттуда, в конечном результате, отправлять письмо. ну тот же phpMailer, к примеру. Одно точно - хотите, что-то серьезное для рассылок, да надо свой почтовый сервер(хотя бы на отправку) или сервисами пользоваться (по любому платно). Ну и разумеется базу подписчиков надо набирать, а не покупать. Ибо одно не открытое письмо получателем уже минус репутации, а если нажата кнопка спам и того веселее. У Вас никогда небыло так: приходят с каого-нибудь отправителя письма, а вы их не читая в корзину... и через время почтовая служба майл Вам задает вопрос: «Мы заметили вы не читаете рассылки с этого адреса. Хотите заблокировать отправителя (или отписать от рассылки - точно не помню)». У меня майл не раз так спрашивал. В целом в двух словах всех мелочей не объяснить. Даже один не ловкий пробел при создании формы наградит спам балами. Сам рассылками не занимался на 100% не скажу, но, если бы все было так печально, то разве существовали бы такие тяжелые плагины для рассылок у вордпресс?? Быть может проблема в том, что люди не все учитывают, потому и блок ловят. Ведь не смотря на то, что эти плагины есть, это не значит, что ты не должен понимать как все устроено!?

    почитайте «Почему письма попадают в спам» (не эталон, но чтобы было в голове) - https://sp a m t est.smtp.bz/ (уберите пробелы тут sp a m t est - habr реагирует остро на это слово)



    З.ы. Если письма будут уходить на свою же почту (с info@site.ru на info@site.ru типо форма обратной связи), то можно забить)))
  • Почему не обновляет метаданные пользователя через форму на сайте?

    viktorleg,
    Надеюсь ясно выразился


    Да. Но тут, думаю, надо писать некий класс(ООП), например, и свои методы под разметку и под обработку разметки. ну и уже вставлять в нужные места. Обработка и разметка в разных методах т.к., например, в профилях пользователся разметка оформлячется через add_action('show_user_profile','xxx') и add_action('edit_user_profile','xxx'), а обработка через add_action('personal_options_update','xxx') и add_action('edit_user_profile_update','xxx'). Теоретически должно получиться(нечто более менее похожее делал, но с формами обратной связи, формой комментов и стр. авторизации). Другой Вопрос - получится ли с кастомными полями через плагин (т.к. не пробовал). В общем точно сказать сложно - надо писать код...
  • Почему не обновляет метаданные пользователя через форму на сайте?

    viktorleg, вопрос не совсем ясен. где Вы выводите? Если Вы добавили в форму выпадающий список и хотите, чтобы все отображалось, не лучше-ли заменить его радиокнопками!
  • Почему не обновляет метаданные пользователя через форму на сайте?

    viktorleg, но это лишь грубые варианты. в любом случае Вам надо все продумывать...
  • Почему не обновляет метаданные пользователя через форму на сайте?

    viktorleg, а вообще формы это необъятная тема. тут различных вариантов для одной только темы может быть огромное количество. Поэтому надо включать логику и развивать креативность (именно от этого и будет зависеть решение и то, будет Ваш код коротким или на несколько страниц при работе с большим объемом данных). а если ещё и о защите форм задуматься (и без этого нельзя), то я лучше промолчу.

    а не подскажешь, как сделать тоже самое, но чтобы несколько полей?


    если не заморачиваться, то вот Вам пример

    spoiler

    function update_basic_user_meta(){
        global $current_user;
    		$u_meta=get_user_meta($current_user->ID,'u_meta',true);
    		$u_meta=!empty($u_meta)?$u_meta:array();
    			if(!empty($_POST['first_name'])){$u_meta['first_name']=$_POST['first_name'];}
    			if(!empty($_POST['communication_email'])){$u_meta['communication_email']=$_POST['communication_email'];}
    		update_user_meta($current_user->ID,'u_meta',$u_meta);
    
    		$u_meta=get_user_meta($current_user->ID,'u_meta',true);
    		$first_name=!empty($u_meta['first_name'])?$u_meta['first_name']:'';
    		$communication_email=!empty($u_meta['communication_email'])?$u_meta['communication_email']:'';?>
    <form action="" method="POST" class="">
        <input type="text" id="first_name" name="first_name" class="" value="<?php echo $first_name; ?>">
        <input type="text" id="communicationEmail" name="communication_email" class="" value="<?php echo $communication_email; ?>">
        <button class="" type="submit">Сохранять</button>
    </form><?php }
    update_basic_user_meta();

  • Почему не обновляет метаданные пользователя через форму на сайте?

    viktorleg, если без какой-либо проверки реагировать на пустое поле, то данные будут всегда пустыми
  • Почему не обновляет метаданные пользователя через форму на сайте?

    viktorleg,
    кстати, после добавления значения в поле вашим методом его не возможно удалить

    разумеется. Если нужна возможность удалить, то необходимо додумывать дописывать обработчик.
    Пример

    function update_basic_user_meta2(){
        global $current_user;
        $communication_meta=!empty($_POST['communication_email'])?$_POST['communication_email']:'';
        if(!empty($communication_meta)){update_user_meta($current_user->ID,'communication_email',sanitize_text_field($communication_meta));}
        if(empty($communication_meta)&&!empty($_POST['mysubmit'])){delete_user_meta($current_user->ID,'communication_email');}
        $communication_email=get_user_meta($current_user->ID,'communication_email',true);?>		
    <form action="" method="POST" class="">
        <input type="text" id="communicationEmail" name="communication_email" class="" value="<?php echo !empty($communication_email)?$communication_email:''; ?>">
        <input class="" type="submit" name="mysubmit" value="Сохранять">
    </form><?php }
    update_basic_user_meta2();


    обратите внимание кнопка сохранить теперь вовсе не баттон...