Ответы в темах

Просмотр 12 ответов — с 1 по 12 (всего 12)
  • Конечно, я нашёл решение — вместо того, чтобы вызывать где-либо эту функцию, повесил на хук after_setup_theme и проверяю, отправлен ли запрос POST с заданным ключом, тогда это работает.

    add_action( 'after_setup_theme', 'custom_registration' );
    function custom_registration() {
    	if(isset($_POST["wp-submit"])) {
    		$userdata = array(
    			'user_login' => $_POST['user_login'],
    			'user_pass'  => $_POST['user_pass'],
    			'user_email' => $_POST['user_email']
    		);
    
    		$user_id = wp_insert_user( $userdata );
    
    		$login_data = array();
    		$login_data['user_login'] = $_POST['user_login'];
    		$login_data['user_password'] = $_POST['user_pass'];
    
    		$user = wp_signon( $login_data, false );
    
    		wp_clear_auth_cookie();
    		wp_set_current_user($user->ID);
    		wp_set_auth_cookie($user->ID, true);
    		$cuser = wp_get_current_user();
    	}
    }

    wp_insert_user возвращает id, сама форма работает, пользователь создаётся.
    Как его теперь авторизовать, зная id?

    А, ну точно, есть же ещё term_meta, я про это совсем забыл. Большое спасибо!

    Решение найдено.

    $terms = get_terms( array(
    	'taxonomy'      => 'movies',
    	'hide_empty'    => 0, 
    ) );		
    foreach( $terms as $k => $term ){
    	$fl = get_first_letter( $term->name );
    	$prev_fl = isset( $terms[ ($k-1) ] ) ? get_first_letter( $terms[ ($k-1) ]->name ) : '';
    	if( $prev_fl !== $fl )		
    	echo $fl . '<br>';	
    	echo '<li>' . ' <a href="' . get_term_link($term) . '">' . $term->name . '</a> ' . '</li>';
    }
    
    function get_first_letter( $str ){
    	return mb_substr($str, 0, 1, 'utf-8');
    }	

    Если проверять как массив, то всё работает правильно!
    Конечно же, я изучаю php, чтобы понимать примеры, которые беру за основу и то, что пишу сам, но что-то всегда можно упустить.
    Задача решена, вопрос закрыт.
    Большое спасибо!

    Большое спасибо за ответ, я пробовал массив name="post_type[]", да, конечно поиск производится по двум типам постов только если указать "post_type[], но тогда чек-боксы вообще не выставляются на следующей странице.
    Может, кто-то сталкивался с подобной задачей, сделать поиск по категориям, типам постов, через чекбоксы, которые должны оставаться отмеченными?

    Я нашёл вот такое решение в интернете, но это, пожалуй, костыли, так как в этом случае нужно две формы поиска, и выбор чекбоксов доступен только на второй странице, поэтому я решил использовать isset().

    Вот мой код, который я использую для формы:

    <form role="search" class="search-box" method="get" action="<?php echo home_url( '/' ); ?>">	
      <input type="search" autocomplete="off" class="search-field"
    placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>"
    value="<?php the_search_query(); ?>"
    name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
    
    <input type="checkbox" name="post_type[]" value="page"
    <?php if(isset($_GET["post_type"])
    and ($_GET["post_type"] == 'page' )) echo ' checked="checked"'; ?> /> <label>Page</label>
    
    <input type="checkbox" name="post_type[]" value="post"
    <?php if(isset($_GET["post_type"])
    and ($_GET["post_type"] == 'post' )) echo ' checked="checked"'; ?> /> <label>Post</label>
    
    <button class="btn-search-head">
       <div class="search_icon_head">
          <i class="fas fa-search"></i>					
       </div>
    </button>
    </form>
    

    В таком варианте поиск можно производить сразу и по страницам, и по записям, если выбрать оба чекбокса, но на следующей странице они не отмечены.
    Если использовать name="post_type", то поиск можно производить только по одному типу, даже если отметить оба, но один из чекбоксов будет отмечен.

    • Ответ изменён 3 года, 7 месяцев назад пользователем turbomen24.
    • Ответ изменён 3 года, 7 месяцев назад пользователем turbomen24.
    • Ответ изменён 3 года, 7 месяцев назад пользователем turbomen24.
    • Ответ изменён 3 года, 7 месяцев назад пользователем turbomen24.

    @yube
    «cheched()» — я имел ввиду, конечно же, функцию «checked()».
    Большое спасибо, это работает, но если перед нажатием кнопки «поиск» я отмечу оба типа записей (page и post), то при переходе на страницу результатов чекбокс будет отмечен только один из двух, но поиск будет производиться по двум типам постов. Почему так происходит?

    Нашёл решение. Если добавлять слаг = / , то ничего не работает. Поэтому удаляем слаг с помощью функции:

    function nameofmeta_remove_slug( $post_link, $post, $leavename ) {
    if ( ‘nameofmeta’ != $post->post_type || ‘publish’ != $post->post_status ) {
    return $post_link;
    }
    $post_link = str_replace( ‘/’ . $post->post_type . ‘/’, ‘/’, $post_link );
    return $post_link;
    }
    add_filter( ‘post_type_link’, ‘nameofmeta_remove_slug’, 10, 3 );

    Затем этот код, чтобы не было ошибки 404:

    function nameoftype_parse_request( $query ) {
    if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query[‘page’] ) ) {
    return;
    }
    if ( ! empty( $query->query[‘name’] ) ) {
    $query->set( ‘post_type’, array( ‘post’, ‘nameoftype’, ‘page’ ) );
    }
    }
    add_action( ‘pre_get_posts’, ‘nameoftype_parse_request’ );

    Если добавить стандартным образом слаг= / при регистрации типа поста и потом этот код, всё равно не работает. Но этот способ работает. Не забываем обновлять постоянные ссылке, если кто-то столкнулся с такой же проблемой.

    Решение оказалось следующим:
    Открываем файл content.php , находим строку <div class=»col-md-8 thumb-col»>
    И меняем значение col-md-8 на col-md-0.
    Дело в том, что даже если я отключал миниатюры постов, тема всё равно на них ссылалась, и оставляла пустое место для них. Таким образом, список постов в блоге, на странице поиска и категорий, стал визуально у правого края.

    @yube
    Какой есть плагин, определяющий шаблоны для страниц?

    Дело в том, что если я убираю картинки из вывода записей (это можно сделать в настройках моей темы), то все записи на странице блога и на странице записей, отображаются по центру, с пустым местом слева, то есть, я полагаю, где-то засел код «center» в отображении, по которому это происходит, мне бы хотелось это поменять на , допустим «left».

    @tuxfighter
    Ну слушайте, это конечно понятно, но мой вопрос — где это находится в php файлах темы, поскольку я могу сам это изменить, но не могу найти место, где это находится.

Просмотр 12 ответов — с 1 по 12 (всего 12)