WordPress - Включение расширенного настраиваемого поля (ACF) в поиск по сообщениям в блоге и отображение полей в результатах поиска - PullRequest
0 голосов
/ 05 ноября 2018

У меня каверзный вопрос. Надеюсь, это не станет нишей, которая не сможет помочь всем.

Я создал пользовательский поиск, который будет отображать результаты только из указанной категории. Если вы хотите сделать то же самое, выполните шаги 1 и 2.

  1. Создать форму для поиска:

Сохраните его как advanced.php в корне вашей темы / дочерней темы. У вас уже будет файл search.php в этом каталоге.

/ blog / - это путь к вашим сообщениям в блоге - если вы не получили результатов, отметьте это.

Значение cat_slug становится вашей категорией, в которой оно будет искать.

<form method="get" id="advanced-searchform" role="search" action="<?php echo esc_url( home_url( '/blog/' ) ); ?>">
    <input type="hidden" name="search" value="post">
    <input id="search-case-study" class="search-case-study" type="text" value="" placeholder="Search..." name="s" />
    <input name="cat_slug" value="case-study" />
    <input type="submit" id="searchsubmit" value="Search" />
</form>
  1. Добавить к functions.php:

    function advanced_search_query( $query ) {
    
    // check if search AND if "cat_slug" input was present
    if( $query->is_search() && ! empty( $_GET['cat_slug'] ) ) {
    
        // find the category by the slug passed in the input
        $term = get_category_by_slug( $_GET['cat_slug'] ); 
        // defensive check, in case the category could not be found
        if ( ! empty( $term->term_id ) ) {
    
            // get the category ID
            $cat_id = $term->term_id;
            // set the query argument to search within the category
            $query->set( 'cat', $cat_id );
    
        }
    
    }
    
    }
    

    add_action ('pre_get_posts', 'advanced_search_query');

Теперь результаты поиска сужены. Мне нужно настроить, какие элементы поста я вижу.

На данный момент я создал свои блоги, относящиеся к этому поиску, с помощью пользовательского шаблона, использующего ACF, как вы можете видеть в моей форме, в категории есть фрагмент «case-study». Нам не нужны все поля, которые я использовал. Поля, относящиеся к поиску: повторитель - case_study_page_content sub_fields - заголовок sub_fields - автор подполя - содержание

Я начал редактировать мой файл content.php, содержащийся в каталоге template-parts, чтобы отобразить результаты, это выглядит так:

<article <?php post_class(); ?> class="blog-post">

<a href="<?php the_permalink(); ?>" class="box-link"></a>

    <?php $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'thumbnail' ); ?>
    <img src="<?php echo $url ?>" />

    <h2>
      <?php the_title(); ?>
    </h2>

    <h3>
        <?php the_field('author'); ?>
    </h3>

    <!--
    <div>
      <?php the_excerpt(); ?>
    </div>
    -->

</article>

Именно здесь я столкнулся со своим осложнением, так как не могу просто вызвать the_field ('author'); в цикл результатов.

Кто-нибудь еще мог успешно извлечь значения из ACF, используемые в пользовательском шаблоне страницы блога, на страницу результатов поиска?

Заранее большое спасибо, это немного превышает мой мозг, и любая помощь будет высоко оценена. Джейсон.

1 Ответ

0 голосов
/ 05 ноября 2018

Благодаря указаниям @Stender и @siddhesh - я вышел из своего безумия.

У меня сложилось впечатление, что я должен был разрешить поиск ACF, хотя на самом деле вы уже можете их вызывать. Мой файл content.php теперь выглядит так:

<article <?php post_class(); ?> class="blog-post">

    <a href="<?php the_permalink(); ?>" class="box-link"></a>

    <?php $url = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'thumbnail' ); ?>
    <img src="<?php echo $url ?>" />

    <h2>
      <?php the_title(); ?>
    </h2>

    <?php
        $case_study = get_field('case_study_page_content');
    ?>

    <?php if( $case_study ): ?>
        <?php while( have_rows('case_study_page_content') ): the_row();
            $case_study_author = get_sub_field('author');
        ?>
            <h3>
                <?php echo $case_study_author; ?>
            </h3>
        <?php endwhile; ?>
    <?php endif; ?>

</article>
...