• Добавить дополнительное поле в форму регистрации 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();


    обратите внимание кнопка сохранить теперь вовсе не баттон...
  • Почему не работает пагинация?

    проблема не в данном коде (проверил - работает)

    вот ещё вариант Вам -
    покрутите


    Ох уж эта пагинация... Столько лет ищем, а она в бесплатной теме по дефолту лежит себе:
    и все ещё актуальна

    <?php
    /**
     * Custom template tags for Twenty Fourteen
     *
     * @package WordPress
     * @subpackage Twenty_Fourteen
     * @since Twenty Fourteen 1.0
     */
    
    if ( ! function_exists( 'twentyfourteen_paging_nav' ) ) :
    /**
     * Display navigation to next/previous set of posts when applicable.
     *
     * @since Twenty Fourteen 1.0
     *
     * @global WP_Query   $wp_query   WordPress Query object.
     * @global WP_Rewrite $wp_rewrite WordPress Rewrite object.
     */
    function twentyfourteen_paging_nav() {
    	global $wp_query, $wp_rewrite;
    
    	// Don't print empty markup if there's only one page.
    	if ( $wp_query->max_num_pages < 2 ) {
    		return;
    	}
    
    	$paged        = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
    	$pagenum_link = html_entity_decode( get_pagenum_link() );
    	$query_args   = array();
    	$url_parts    = explode( '?', $pagenum_link );
    
    	if ( isset( $url_parts[1] ) ) {
    		wp_parse_str( $url_parts[1], $query_args );
    	}
    
    	$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
    	$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';
    
    	$format  = $wp_rewrite->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
    	$format .= $wp_rewrite->using_permalinks() ? user_trailingslashit( $wp_rewrite->pagination_base . '/%#%', 'paged' ) : '?paged=%#%';
    
    	// Set up paginated links.
    	$links = paginate_links( array(
    		'base'     => $pagenum_link,
    		'format'   => $format,
    		'total'    => $wp_query->max_num_pages,
    		'current'  => $paged,
    		'mid_size' => 1,
    		'add_args' => array_map( 'urlencode', $query_args ),
    		'prev_text' => __( '&larr; Previous', 'twentyfourteen' ),
    		'next_text' => __( 'Next &rarr;', 'twentyfourteen' ),
    	) );
    
    	if ( $links ) :
    
    	?>
    	<nav class="navigation paging-navigation" role="navigation">
    		<h1 class="screen-reader-text"><?php _e( 'Posts navigation', 'twentyfourteen' ); ?></h1>
    		<div class="pagination loop-pagination">
    			<?php echo $links; ?>
    		</div><!-- .pagination -->
    	</nav><!-- .navigation -->
    	<?php
    	endif;
    }
    endif;


  • Как узнать какие страницы используют определенный шаблон WordPress?

    выводите циклом get_post_meta($post->ID,'_wp_page_template',true);
    что-то типа:
    $pg=get_pages(/*выборка*/);
    foreach($pg as $post){
    	setup_postdata($post);
    	$meta_v=get_post_meta($post->ID,'_wp_page_template',true);//если meta_v пустой или default - значит дефолт, в остальном укажет шаблон
    	echo $post->ID.' - '.get_the_title().' - '.$post->post_type.' - '.$meta_v.'<br>';
    }
    wp_reset_postdata();