最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

custom taxonomy - Tags being removed upon updates to related posts: ACFGenesisWP5.4.1

programmeradmin3浏览0评论

I have a custom post type for 'news' which contains a 'news-tags' taxonomy. And another post type 'practices' which are tagged in news items. When I update any post of the 'practices' type, all tags for that practice are being incorrectly removed from all news items. As an example, if I tag a news post with the "real estate" practice, then update the Real Estate practice, the Real Estate tag is removed from ALL News items. Anyone know where I should begin troubleshooting? I've removed all plugins except ACF and the problem still exists.

The News Post Type...

<?php

if ( ! defined( 'ABSPATH' ) )
    exit; 

if( class_exists( 'CT_News' ) )
    return;

class CT_News {

    const POST_TYPE = 'ct-news';
    const TAX_TAGS = 'ct-news-tags';
    const PERMALINK = 'news';

    public function __construct( $post = NULL ){
        if( is_object( $post ) ){
            foreach ( get_object_vars( $post ) as $key => $value )
                $this->$key = $value;
        }
    }

    public function get_post_type(){
        return self::POST_TYPE;
    }

    public function get_tax_tags(){
        return self::TAX_TAGS;
    }

    public function _init(){
        add_action( 'init', array( $this, '_register' ) );
        add_action( 'init', array( $this, '_register_tax' ) );
        add_filter( 'enter_title_here', array( $this, '_title_text' ) );
        add_shortcode( 'display-news', array( $this, 'display_news_shortcode' ) );
        add_action( 'pre_get_posts', array( $this, 'filter_news_archive' ) );
        add_filter( 'searchwp_swp_query_args', array( $this, 'filter_news' ) );

        // Setup Custom Sidebar
        add_action( 'init', array( $this, 'setup_sidebars' ) );
    }

    public function _register(){
        $labels = array(
            'name'                  => _x( 'Articles', 'Post Type General Name', 'colmt' ),
            'singular_name'         => _x( 'Article', 'Post Type Singular Name', 'colmt' ),
            'menu_name'             => __( 'News', 'colmt' ),
            'name_admin_bar'        => __( 'News', 'colmt' ),
            'archives'              => __( 'News Archives', 'colmt' ),
            'parent_item_colon'     => __( 'Parent Article:', 'colmt' ),
            'all_items'             => __( 'All News', 'colmt' ),
            'add_new_item'          => __( 'Add New Article', 'colmt' ),
            'add_new'               => __( 'Add New', 'colmt' ),
            'new_item'              => __( 'New Article', 'colmt' ),
            'edit_item'             => __( 'Edit Article', 'colmt' ),
            'update_item'           => __( 'Update Article', 'colmt' ),
            'view_item'             => __( 'View Article', 'colmt' ),
            'search_items'          => __( 'Search News', 'colmt' ),
            'not_found'             => __( 'Not found', 'colmt' ),
            'not_found_in_trash'    => __( 'Not found in Trash', 'colmt' ),
            'featured_image'        => __( 'Featured Image', 'colmt' ),
            'set_featured_image'    => __( 'Set featured image', 'colmt' ),
            'remove_featured_image' => __( 'Remove featured image', 'colmt' ),
            'use_featured_image'    => __( 'Use as featured image', 'colmt' ),
            'insert_into_item'      => __( 'Insert into article', 'colmt' ),
            'uploaded_to_this_item' => __( 'Uploaded to this article', 'colmt' ),
            'items_list'            => __( 'News list', 'colmt' ),
            'items_list_navigation' => __( 'News list navigation', 'colmt' ),
            'filter_items_list'     => __( 'Filter news list', 'colmt' ),
        );
        $rewrite = array(
            'slug'                  => self::PERMALINK,
            'with_front'            => false,
            'pages'                 => true,
            'feeds'                 => true,
        );
        $args = array(
            'label'                 => __( 'Article', 'colmt' ),
            'description'           => __( 'Colmt News Articles', 'colmt' ),
            'labels'                => $labels,
            'supports'              => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'revisions', 'genesis-seo', 'genesis-cpt-archives-settings' ),
            'taxonomies'            => array( self::TAX_TAGS ),
            'hierarchical'          => false,
            'public'                => true,
            'show_ui'               => true,
            'show_in_menu'          => true,
            'menu_position'         => 5,
            'menu_icon'             => 'dashicons-format-aside',
            'show_in_admin_bar'     => true,
            'show_in_nav_menus'     => true,
            'can_export'            => true,
            'has_archive'           => self::PERMALINK,
            'exclude_from_search'   => false,
            'publicly_queryable'    => true,
            'rewrite'               => $rewrite,
            'capability_type'       => 'post',
        );
        register_post_type( self::POST_TYPE, $args );
    }

    public function _register_tax(){
        $labels = array(
            'name'                       => _x( 'Tags', 'Taxonomy General Name', 'colmt' ),
            'singular_name'              => _x( 'Tag', 'Taxonomy Singular Name', 'colmt' ),
            'menu_name'                  => __( 'News Tags', 'colmt' ),
            'all_items'                  => __( 'All Tags', 'colmt' ),
            'parent_item'                => __( 'Parent Tag', 'colmt' ),
            'parent_item_colon'          => __( 'Parent Tag:', 'colmt' ),
            'new_item_name'              => __( 'New Tag Name', 'colmt' ),
            'add_new_item'               => __( 'Add New Tag', 'colmt' ),
            'edit_item'                  => __( 'Edit Tag', 'colmt' ),
            'update_item'                => __( 'Update Tag', 'colmt' ),
            'view_item'                  => __( 'View Tag', 'colmt' ),
            'separate_items_with_commas' => __( 'Separate tags with commas', 'colmt' ),
            'add_or_remove_items'        => __( 'Add or remove tags', 'colmt' ),
            'choose_from_most_used'      => __( 'Choose from the most used', 'colmt' ),
            'popular_items'              => __( 'Popular Tags', 'colmt' ),
            'search_items'               => __( 'Search News Tags', 'colmt' ),
            'not_found'                  => __( 'Not Found', 'colmt' ),
            'no_terms'                   => __( 'No tags', 'colmt' ),
            'items_list'                 => __( 'Tags list', 'colmt' ),
            'items_list_navigation'      => __( 'Tags list navigation', 'colmt' ),
        );
        $rewrite = array(
            'slug'                       => 'news-tags',
            'with_front'                 => false,
            'hierarchical'               => false,
        );
        $args = array(
            'labels'                     => $labels,
            'hierarchical'               => false,
            'public'                     => true,
            'show_ui'                    => true,
            'show_admin_column'          => true,
            'show_in_nav_menus'          => false,
            'show_tagcloud'              => true,
            'rewrite'                    => $rewrite,
        );
        register_taxonomy( self::TAX_TAGS, array( self::POST_TYPE ), $args );
    }

    function _title_text( $title ){
        $screen = get_current_screen();

        if ( $screen->post_type != self::POST_TYPE )
            return $title;

        return __( 'Enter Article Title', 'colmt' );
    }

    public function archive_adjustments(){
        if( ! is_post_type_archive( self::POST_TYPE ) )
            return;

        //* Force Full Width Content Layout
        add_filter( 'genesis_pre_get_option_site_layout', '__genesis_return_full_width_content' );
    }

    public function get_related( $context, $post_id = NULL, $count = 1 ){
        $news_args = array(
            'post_type' => self::POST_TYPE,
            'post_status' => 'publish',
            'posts_per_page' => $count,
            'meta_query' => array(
                'relation' => 'AND',
                array(
                    'key' => $context . '-tags',
                    'value' => '"' . $post_id . '"', // wrap in quotes to match exact value in serialized field.
                    'compare' => 'LIKE'
                )
            )
        );

        return new WP_Query( $news_args );
    }

    /**
     * Display News Shortcode
     * @param  array  $atts    Shortcode Atts
     * @param  string $content Shortcode Content
     * @return string          HTML/Content
     */
    function display_news_shortcode( $atts = array(), $content = NULL ){
        $atts = shortcode_atts(
            array(
                'count' => 3,
                'context' => NULL,
                'format' => 'F j, Y',
                'more-text' => __( 'More News', 'colmt' ),
                'more-class' => 'more-news',
                'related' => NULL
            ), $atts, 'display-news' );

        if( $atts['related'] && $atts['context'] ){
            $news = $this->get_related( $atts['context'], $atts['related'], $atts['count'] );
        } else {
            $news_args = array(
                'post_type' => self::POST_TYPE,
                'post_status' => 'publish',
                'posts_per_page' => $atts['count']
            );

            $news = new WP_Query( $news_args );
        }

        if( ! $news->have_posts() )
            return '';

        $output = '<div class="news">';

        global $post;

        if( count( $news->posts ) < $atts['count'] )
            $atts['more-text'] = false;
        while( $news->have_posts() ): $news->the_post();
            $permalink = get_permalink();
            $excerpt = $post->post_excerpt ? get_the_excerpt() : get_the_title();
            $output .= '<div class="news-item">';
                $output .= '<div class="news-date">' . get_the_date( $atts['format'] ) . '</div>';
                $output .= '<div class="news-excerpt"><a href="' . esc_attr( $permalink ) . '">';
                    $output .= $excerpt;
                $output .= '</a></div>';
            $output .= '</div><!-- .news-item -->';
        endwhile;
        wp_reset_postdata();

        if( $atts['more-text'] ){
            $more_link = '/' . self::PERMALINK . '/';
            if( $atts['related'] && $atts['context'] )
                $more_link .= '?' . $atts['context'] . '=' . $atts['related'];
            $output .= '<p class="read-more-news"><a href="' . $more_link . '" class="' . esc_attr( $atts['more-class'] ) . '">' . $atts['more-text'] . '</a></p>';
        }

        $output .= '</div><!-- .news -->';

        return $output;
    }

    public function setup_sidebars(){
        /**
         * News Article (Singular) Sidebar
         */
        genesis_register_sidebar( array(
            'id'            => 'news-article',
            'name'          => __( 'News Article (Singular)', 'colmt' ),
            'description'   => __( 'This is displayed on singular News Article templates', 'colmt' ),
        ) );
    }

    function filter_news_archive( $q ){
        if( ! $q->is_main_query() )
            return;

        if( ! $q->is_post_type_archive( self::POST_TYPE ) )
            return;

        $args = $this->filter_news();
        $meta_query = $q->get('meta_query');
        if( ! is_array( $meta_query ) )
            $meta_query = array();

        unset( $args['meta_query']['relation'] );

        foreach( $args['meta_query'] as $mq ){
            $meta_query[] = $mq;
        }

        $meta_query['relation'] = 'OR';

        $q->set( 'meta_query', $meta_query );
    }

    public function filter_news( $args = array() ){

        if( ! is_post_type_archive( self::POST_TYPE ) )
            return $args;

        $meta_query = isset( $args['meta_query'] ) ? $args['meta_query'] : array();

        if( ! is_array( $meta_query ) )
            $meta_query = array();

        // apply filters
        if( isset( $_GET['practice-areas'] ) ){
            $practice_area_id = intval( $_GET['practice-areas'] );

            $meta_query[] = array(
                'key' => 'practice-areas-tags',
                'value' => '"' . $practice_area_id . '"',
                'compare' => 'LIKE'
            );
        }

        if( isset( $_GET['attorneys'] ) ){
            $attorney_id = intval( $_GET['attorneys'] );

            $meta_query[] = array(
                'key' => 'attorneys-tags',
                'value' => '"' . $attorney_id . '"',
                'compare' => 'LIKE'
            );
        }

        $args['meta_query']['relation'] = 'OR';
        $args['meta_query'] = $meta_query;

        return $args;
    }

}

The Practices Post Type:

<?php

if ( ! defined( 'ABSPATH' ) )
    exit;

if( class_exists( 'CT_Practice_Area' ) )
    return;

class CT_Practice_Area {

    const POST_TYPE = 'ct-practice-area';
    private static $_this;

    public function __construct( $post = NULL ){
        self::$_this = $this;

        if( is_object( $post ) ){
            foreach ( get_object_vars( $post ) as $key => $value )
                $this->$key = $value;
        }
    }

    public function get_post_type(){
        return self::POST_TYPE;
    }

    public function _init(){
        add_action( 'init', array( $this, '_register' ) );
        add_filter( 'enter_title_here', array( $this, '_title_text' ) );
        add_shortcode( 'practice-areas-list', array( $this, 'practice_areas_list_shortcode' ) );

        // bidirectional field syncs
        add_filter( 'acf/update_value/name=clients-tags', array( self::$_this, 'bidirectional_sync_practice_areas_tags' ), 10, 3 );
        add_filter( 'acf/update_value/name=practice-area-contacts', array( self::$_this, 'bidirectional_sync_attorney_practice_area_contacts' ), 10, 3 );
        add_filter( 'acf/update_value/name=practice-area-attorneys', array( self::$_this, 'bidirectional_sync_attorney_practice_areas' ), 10, 3 );

        //add_action( 'template_redirect', array( $this, 'disable_root_practice_areas' ) );

        add_action( 'init', array( $this, 'setup_sidebars' ) );

        add_filter( 'pre_get_posts', array( $this, 'archive_query_adjustments' ) );

        add_filter( 'get_previous_post_where', array( $this, 'exclude_parent_posts' ), 10, 5 );
        add_filter( 'get_next_post_where', array( $this, 'exclude_parent_posts' ), 10, 5 );

        add_image_size( 'practice-area-archive', 220, 110, true );
    }

    public function _register(){
        $labels = array(
            'name'                  => _x( 'Services', 'Post Type General Name', 'colmt' ),
            'singular_name'         => _x( 'Service', 'Post Type Singular Name', 'colmt' ),
            'menu_name'             => __( 'Services', 'colmt' ),
            'name_admin_bar'        => __( 'Services', 'colmt' ),
            'archives'              => __( 'Services', 'colmt' ),
            'parent_item_colon'     => __( 'Parent Service:', 'colmt' ),
            'all_items'             => __( 'All Services', 'colmt' ),
            'add_new_item'          => __( 'Add New Service', 'colmt' ),
            'add_new'               => __( 'Add New', 'colmt' ),
            'new_item'              => __( 'New Service', 'colmt' ),
            'edit_item'             => __( 'Edit Service', 'colmt' ),
            'update_item'           => __( 'Update Service', 'colmt' ),
            'view_item'             => __( 'View Service', 'colmt' ),
            'search_items'          => __( 'Search Services', 'colmt' ),
            'not_found'             => __( 'Not found', 'colmt' ),
            'not_found_in_trash'    => __( 'Not found in Trash', 'colmt' ),
            'featured_image'        => __( 'Featured Image', 'colmt' ),
            'set_featured_image'    => __( 'Set featured image', 'colmt' ),
            'remove_featured_image' => __( 'Remove featured image', 'colmt' ),
            'use_featured_image'    => __( 'Use as featured image', 'colmt' ),
            'insert_into_item'      => __( 'Insert into Service Description', 'colmt' ),
            'uploaded_to_this_item' => __( 'Uploaded to this Service', 'colmt' ),
            'items_list'            => __( 'Services list', 'colmt' ),
            'items_list_navigation' => __( 'Services list navigation', 'colmt' ),
            'filter_items_list'     => __( 'Filter Services list', 'colmt' ),
        );
        $rewrite = array(
            'slug'                  => 'practice-area',
            'with_front'            => false,
            'pages'                 => true,
            'feeds'                 => true,
        );
        $args = array(
            'label'                 => __( 'Practice Area', 'colmt' ),
            'description'           => __( 'Colmt Practice Areas', 'colmt' ),
            'labels'                => $labels,
            'supports'              => array( 'title', 'editor', 'excerpt', 'thumbnail', 'revisions', 'page-attributes', 'genesis-seo' ),
            'hierarchical'          => true,
            'public'                => true,
            'show_ui'               => true,
            'show_in_menu'          => true,
            'menu_position'         => 20,
            'menu_icon'             => 'dashicons-index-card',
            'show_in_admin_bar'     => true,
            'show_in_nav_menus'     => true,
            'can_export'            => true,
            'has_archive'           => 'practice-areas',
            'exclude_from_search'   => false,
            'publicly_queryable'    => true,
            'rewrite'               => $rewrite,
            'capability_type'       => 'post',
        );
        register_post_type( self::POST_TYPE, $args );
    }

    // function disable_root_practice_areas(){
    //  if( ! is_singular( self::POST_TYPE ) )
    //      return;

    //  $obj = get_queried_object();
    //  if( ! $obj->post_parent ){
    //      wp_redirect( '/practice-areas/' );
    //      exit();
    //  }
    // }

    function _title_text( $title ){
        $screen = get_current_screen();

        if ( $screen->post_type != self::POST_TYPE )
            return $title;

        return __( 'Enter Practice Area Name', 'colmt' );
    }

    public function bidirectional_sync_practice_areas_tags( $value, $post_id, $field ) {
        return ct_sync_field( 'practice-areas-tags', $value, $post_id, $field );
    }

    public function bidirectional_sync_attorney_practice_area_contacts( $value, $post_id, $field ) {
        return ct_sync_field( 'attorney-practice-area-contacts', $value, $post_id, $field );
    }

    public function bidirectional_sync_attorney_practice_areas( $value, $post_id, $field ) {
        return ct_sync_field( 'attorney-practice-areas', $value, $post_id, $field );
    }

    public function setup_sidebars(){

        genesis_register_sidebar( array(
            'id'            => 'practice-area',
            'name'          => __( 'Practice Area (Singular)', 'colmt' ),
            'description'   => __( 'This is displayed on singular Practice Area templates', 'colmt' ),
        ) );
    }

    public function archive_query_adjustments( $q ){
        if( is_admin() )
            return $q;

        if( ! $q->is_main_query() || ! $q->is_post_type_archive( self::POST_TYPE ) )
            return $q;

        $q->set( 'posts_per_page', '-1' );
        $q->set( 'post_parent', '0' );
        $q->set( 'orderby', 'menu_order title' );
        $q->set( 'order', 'ASC' );
    }

    public function get_children( $parent = NULL ){
        if( ! $parent )
            $parent = get_the_ID();

        $children_args = array(
            'post_type' => self::POST_TYPE,
            'post_parent' => $parent,
            'post_status' => 'publish',
            'posts_per_page' => '-1',
            'orderby' => 'menu_order post_title',
            'order' => 'ASC'
        );
        $children = new WP_Query( $children_args );

        return $children;
    }

    public function exclude_parent_posts( $where, $in_same_term, $excluded_terms, $taxonomy, $post ){
        if( get_post_type( $post ) != self::POST_TYPE )
            return $where;

        global $wpdb;
        $exclude_parents = 'p.post_parent != 0';
        $where .= $where ? ' AND ' . $exclude_parents : $exclude_parents;
        return $where;
    }

    public function practice_areas_list_shortcode( $atts = array(), $content = NULL ){
        $atts = shortcode_atts(
            array(
                'source' => NULL,
                'link-to-practice-area' => true,
                'attorney' => get_the_ID()
            ), $atts, 'practice-areas-list' );

        ct_boolean_atts( $atts );

        if( ! $atts['source'] )
            $atts['source'] = 'all';

        $output = '';
        $related_practice_areas = false;
        $practice_areas_args = array();

        if( $atts['source'] == 'attorney' ){
            $related_practice_areas = get_field( 'attorney-practice-areas', $atts['attorney'] );
            if( ! $related_practice_areas )
                return $output;
        } elseif( $atts['source'] == 'tagged' ){
            $related_practice_areas = get_field( 'practice-areas-tags' );
            if( ! $related_practice_areas )
                return $output;
        }

        if( $related_practice_areas ){
            $practice_area_ids = wp_list_pluck( $related_practice_areas, 'ID' );
            $practice_areas_args['post__in'] = $practice_area_ids;
            $practice_areas_args['orderby'] = 'post__in';
        }

        if( $atts['source'] == 'all' ){
            $practice_areas_args = array(
                'post_status' => 'publish',
                'post_type' => self::POST_TYPE,
                'posts_per_page' => '-1',
                'post_parent' => 0,
                'orderby' => 'menu_order post_title',
                'order' => 'asc'
            );

            $practice_areas = new WP_Query( $practice_areas_args );
        } else {
            $practice_areas = $this->get_practice_areas( $practice_areas_args );
        }

        if( $practice_areas->have_posts() ):
            $output .= '<ul class="practice-areas-list">';
                while( $practice_areas->have_posts() ): $practice_areas->the_post();
                    $title = ct_get_practice_area_title_with_icon( '%s %s' );

                    $line = $atts['link-to-practice-area'] && $atts['source'] != 'all' ? sprintf( '<a href="%s">%s</a>', get_permalink( get_the_ID() ), $title ) : sprintf( '<span>%s</span>', $title );

                    $output .= sprintf( '<li class="practice-area">%s', $line );

                    $children = $this->get_children( get_the_ID() );

                    if( $children->have_posts() && $atts['source'] == 'all' ):
                        $output .= '<ul class="child-practice-areas">';

                        while( $children->have_posts() ): $children->the_post();
                            $line = $atts['link-to-practice-area'] ? sprintf( '<a href="%s">%s</a>', get_permalink( get_the_ID() ), get_the_title() ) : sprintf( '<span>%s</span>', get_the_title() );
                            $output .= sprintf( '<li class="practice-area">%s</li>', $line );

                        endwhile;
                        wp_reset_postdata();
                        $output .= '</ul><!-- .child-practice-areas -->';
                    endif;

                    $output .= '</li>';
                endwhile;
                wp_reset_postdata();
            $output .= '</ul><!-- .practice-areas-list -->';

        endif;

        return $output;
    }

    public function get_practice_areas( $args = array() ){
        $practice_areas_args = array(
            'post_status' => 'publish',
            'post_type' => self::POST_TYPE,
            'posts_per_page' => '-1',
        );

        $practice_areas_args = array_merge( $practice_areas_args, $args );

        return new WP_Query( $practice_areas_args );
    }
}

Some filtering for news searches:

<?php

// add_filter( 'genesis_cpt_archive_intro_text_output', 'ct_insert_news_search' );


remove_action( 'genesis_before_loop', 'genesis_archive_title_description', 15 );
remove_action( 'genesis_before_loop', 'genesis_do_taxonomy_title_description', 15 );
add_action( 'genesis_before_loop', 'do_taxonomy_title_description', 16 );
add_filter( 'genesis_term_intro_text_output', 'ct_insert_news_search' );

add_filter( 'genesis_pre_get_option_site_layout', '__genesis_return_full_width_content' );


function do_taxonomy_title_description() {

    global $wp_query, $wp_embed; 

    if ( ! is_category() && ! is_tag() && ! is_tax() ) {
        return;
    }

    $term = is_tax() ? get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ) : $wp_query->get_queried_object();

    if ( ! $term ) {
        return;
    }

    $heading = get_term_meta( $term->term_id, 'headline', true );
    if ( empty( $heading ) ) {
        $heading = $term->name . " News";
    }

    $intro_text = get_term_meta( $term->term_id, 'intro_text', true );
    $intro_text = $wp_embed->autoembed( $intro_text );
    $intro_text = do_shortcode( $intro_text );
    $intro_text = wpautop( $intro_text );

    $intro_text = apply_filters( 'genesis_term_intro_text_output', $intro_text ? $intro_text : 'Filter news by keyword' );
    // $intro_text = apply_filters( 'genesis_term_intro_text_output', $intro_text ? $intro_text : '' );

    /**
     * Fires at end of doing taxonomy archive title and description.
     *
     * Allows you to reorganize output of the archive headings.
     *
     * @since 2.5.0
     *
     * @param string $heading    Archive heading.
     * @param string $intro_text Archive intro text.
     * @param string $context    Context.
     */
    do_action( 'genesis_archive_title_descriptions', $heading, $intro_text, 'taxonomy-archive-description' );

}


function ct_insert_news_search( $text ) {
    $post_type = CT()->news->get_post_type();
    $post_url = get_post_type_archive_link( $post_type );
    $clear_text_url = remove_query_arg( $post_type . '-filter', $post_url );

    $filters = '';

    if ( isset( $_GET['practice-areas'] ) ){
        $filters .= '<input type="hidden" name="practice-areas" value="' . esc_attr( intval( $_GET['practice-areas'] ) ) . '" />';
        $clear_text_url = add_query_arg( array( 'practice-areas' => intval( $_GET['practice-areas'] ) ), $clear_text_url );
    }
    if ( isset( $_GET['attorneys'] ) ){
        $filters .= '<input type="hidden" name="attorneys" value="' . esc_attr( intval( $_GET['attorneys'] ) ) . '" />';
        $clear_text_url = add_query_arg( array( 'attorneys' => intval( $_GET['attorneys'] ) ), $clear_text_url );
    }

    $search = '<form role="search" method="get" class="search-form" action="' . $post_url . '">
        <label>
            <a href="' . $clear_text_url . '" class="clear-search"><i class="fa fa-times"></i></a>
            <span class="screen-reader-text">' . strip_tags( $text ) . '</span>
            <input type="search" class="search-field" value="' . esc_attr( ct_get_news_search_string() ) . '" name="' . $post_type . '-filter" title="' . esc_attr( strip_tags( $text ) ) . '">
            ' . $filters . '
        </label>
        <input type="submit" class="search-submit" value="Search">
    </form>';

    $output = '<div class="news-search">' . $search . '</div>';

    return $output;
}


add_action( 'genesis_entry_header', 'ct_archive_featured_image', 2 );

function ct_archive_featured_image(){
    $featured = ct_get_featured_image( 'archive-featured' );
    if ( ! $featured )
        return;

    echo '<div class="featured-image">';
        echo '<img src="' . $featured[0] . '" />';
    echo '</div>';
}

remove_action( 'genesis_entry_header', 'genesis_post_info', 12 );
add_action( 'genesis_entry_header', 'genesis_post_info', 9 );
add_filter( 'genesis_post_info', 'ct_news_post_info' );

function ct_news_post_info( $post_info ) {
    $post_info = '[post_date] [post_edit]';
    return $post_info;
}

add_filter( 'genesis_post_meta', 'ct_news_post_meta' );


function ct_news_post_meta( $post_meta ) {
    $tags_list = get_the_term_list( get_the_ID(), CT()->news->get_tax_tags(), '', ', ' );
    $attorneys = get_field( 'attorneys-tags' );
    $practice_areas = get_field( 'practice-areas-tags' );



    $attorneys_list = array();
    $practice_areas_list = array();

    if ( is_array( $attorneys ) ){
        foreach( $attorneys as $attorney ){
            if ( ! $attorney )
                continue;
            $attorneys_list[] = '<a href="' . get_permalink( $attorney->ID ) . '">' . get_the_title( $attorney->ID ) . '</a>';
        }
    }

    if ( is_array( $practice_areas ) ){
        foreach( $practice_areas as $practice_area ){
            if ( ! $practice_area )
                //todo Jim
                echo($practice_area->ID);
                continue;
            $practice_areas_list[] = '<a href="' . get_permalink( $practice_area->ID ) . '">' . get_the_title( $practice_area->ID ) . '</a>';
        }
    }

    $post_meta = $tags_list;
    $post_meta .= $post_meta ? rtrim( ', ' . implode( ', ', $attorneys_list ), ', ' ) : implode( ', ', $attorneys_list );
    $post_meta .= $post_meta ? rtrim( ', ' . implode( ', ', $practice_areas_list ), ', ' ) : implode( ', ', $practice_areas_list );

    //echo($post_meta);
    return $post_meta;
}

add_action( 'genesis_before_loop', 'ct_news_archive_header', 17 );

function ct_news_archive_header(){

    $label = ct_get_news_search_string() ? __( 'News Search Results', 'colmt' ) : __( 'Most Recent News', 'colmt' );


    if ( isset( $_GET['attorneys'] ) ){
        //$attorney_name = get_field( 'attorney-goes-by', intval( $_GET['attorneys'] ) );
        $attorney_name = get_the_title( intval( $_GET['attorneys'] ) );
        $clear_filter_url = remove_query_arg( 'attorneys' );
        $label .= ' <span class="filtered-by"><em>' . __( 'about ', 'colmt' ) . '</em><strong>' . $attorney_name . '</strong><a href="' . esc_attr( $clear_filter_url ) . '"><i class="fa fa-times"></i></a></span>';
    }


        if ( isset( $_GET['practice_areas'] ) ){
        $practice_area = get_the_title( intval( $_GET['practice_areas'] ) );
        $clear_filter_url = remove_query_arg( 'practice_areas' );
        $label .= ' <span class="filtered-by"><em>' . __( 'about ', 'colmt' ) . '</em><strong>' . $practice_area . '</strong><a href="' . esc_attr( $clear_filter_url ) . '"><i class="fa fa-times"></i></a></span>';
    } else { $label .= ''; }


    echo '<div class="news-header">';
        echo sprintf( '<div class="subsection-heading news-heading">%s</div>', $label );
        echo sprintf( '<div class="subsection-heading tags-heading">%s</div>', __( 'Tags', 'colmt' ) );
    echo '</div>';
}

function ct_get_news_search_string(){
    return isset( $_REQUEST[ CT()->news->get_post_type() . '-filter' ] ) ? sanitize_text_field( $_REQUEST[ CT()->news->get_post_type() . '-filter' ] ) : '';
}

remove_all_actions( 'genesis_before_entry_content' );
remove_all_actions( 'genesis_entry_content' );
remove_all_actions( 'genesis_after_entry_content' );

if ( ct_get_news_search_string() && class_exists( 'SWP_Query' ) ){
    remove_action( 'genesis_loop', 'genesis_do_loop' );
    add_action( 'genesis_loop', 'ct_news_archive_search' );
    remove_action( 'genesis_after_endwhile', 'genesis_posts_nav' );
}

function ct_news_archive_search(){

    // retrieve our search query if applicable
    $query = ct_get_news_search_string();

    // retrieve our pagination if applicable
    $current_page = isset( $_REQUEST[ CT()->news->get_post_type() . '-page'] ) ? absint( $_REQUEST[ CT()->news->get_post_type() . '-page'] ) : 1;

    $engine = 'news'; // taken from the SearchWP settings screen

    // see all args at /
    $news_query = new SWP_Query( array(
        's'      => $query,
        'engine' => $engine,
        'page'   => $current_page,
    ) );

    // set up pagination
    $pagination = paginate_links( array(
        'format'  => '?' . CT()->news->get_post_type() . '-page=%#%',
        'current' => $current_page,
        'total'   => $news_query->max_num_pages,
    ) );


    if ( ! empty( $news_query->posts ) ):

        global $post;

        do_action( 'genesis_before_while' );
        foreach ( $news_query->posts as $post ):

            setup_postdata( $post );

            do_action( 'genesis_before_entry' );

            printf( '<article %s>', genesis_attr( 'entry' ) );

                do_action( 'genesis_entry_header' );

                do_action( 'genesis_entry_footer' );

            echo '</article>';

            do_action( 'genesis_after_entry' );

        endforeach; //* end of one post
        wp_reset_postdata();

        do_action( 'genesis_after_endwhile' );

        if ( $news_query->max_num_pages > 1 ): ?>
            <div class="navigation pagination" role="navigation">
                <h2 class="screen-reader-text">Posts navigation</h2>
                <div class="nav-links">
                    <?php echo wp_kses_post( $pagination ); ?>
                </div>
            </div>
        <?php endif;

    else :
        do_action( 'genesis_loop_else' );
    endif; 

genesis();


I have a custom post type for 'news' which contains a 'news-tags' taxonomy. And another post type 'practices' which are tagged in news items. When I update any post of the 'practices' type, all tags for that practice are being incorrectly removed from all news items. As an example, if I tag a news post with the "real estate" practice, then update the Real Estate practice, the Real Estate tag is removed from ALL News items. Anyone know where I should begin troubleshooting? I've removed all plugins except ACF and the problem still exists.

The News Post Type...

<?php

if ( ! defined( 'ABSPATH' ) )
    exit; 

if( class_exists( 'CT_News' ) )
    return;

class CT_News {

    const POST_TYPE = 'ct-news';
    const TAX_TAGS = 'ct-news-tags';
    const PERMALINK = 'news';

    public function __construct( $post = NULL ){
        if( is_object( $post ) ){
            foreach ( get_object_vars( $post ) as $key => $value )
                $this->$key = $value;
        }
    }

    public function get_post_type(){
        return self::POST_TYPE;
    }

    public function get_tax_tags(){
        return self::TAX_TAGS;
    }

    public function _init(){
        add_action( 'init', array( $this, '_register' ) );
        add_action( 'init', array( $this, '_register_tax' ) );
        add_filter( 'enter_title_here', array( $this, '_title_text' ) );
        add_shortcode( 'display-news', array( $this, 'display_news_shortcode' ) );
        add_action( 'pre_get_posts', array( $this, 'filter_news_archive' ) );
        add_filter( 'searchwp_swp_query_args', array( $this, 'filter_news' ) );

        // Setup Custom Sidebar
        add_action( 'init', array( $this, 'setup_sidebars' ) );
    }

    public function _register(){
        $labels = array(
            'name'                  => _x( 'Articles', 'Post Type General Name', 'colmt' ),
            'singular_name'         => _x( 'Article', 'Post Type Singular Name', 'colmt' ),
            'menu_name'             => __( 'News', 'colmt' ),
            'name_admin_bar'        => __( 'News', 'colmt' ),
            'archives'              => __( 'News Archives', 'colmt' ),
            'parent_item_colon'     => __( 'Parent Article:', 'colmt' ),
            'all_items'             => __( 'All News', 'colmt' ),
            'add_new_item'          => __( 'Add New Article', 'colmt' ),
            'add_new'               => __( 'Add New', 'colmt' ),
            'new_item'              => __( 'New Article', 'colmt' ),
            'edit_item'             => __( 'Edit Article', 'colmt' ),
            'update_item'           => __( 'Update Article', 'colmt' ),
            'view_item'             => __( 'View Article', 'colmt' ),
            'search_items'          => __( 'Search News', 'colmt' ),
            'not_found'             => __( 'Not found', 'colmt' ),
            'not_found_in_trash'    => __( 'Not found in Trash', 'colmt' ),
            'featured_image'        => __( 'Featured Image', 'colmt' ),
            'set_featured_image'    => __( 'Set featured image', 'colmt' ),
            'remove_featured_image' => __( 'Remove featured image', 'colmt' ),
            'use_featured_image'    => __( 'Use as featured image', 'colmt' ),
            'insert_into_item'      => __( 'Insert into article', 'colmt' ),
            'uploaded_to_this_item' => __( 'Uploaded to this article', 'colmt' ),
            'items_list'            => __( 'News list', 'colmt' ),
            'items_list_navigation' => __( 'News list navigation', 'colmt' ),
            'filter_items_list'     => __( 'Filter news list', 'colmt' ),
        );
        $rewrite = array(
            'slug'                  => self::PERMALINK,
            'with_front'            => false,
            'pages'                 => true,
            'feeds'                 => true,
        );
        $args = array(
            'label'                 => __( 'Article', 'colmt' ),
            'description'           => __( 'Colmt News Articles', 'colmt' ),
            'labels'                => $labels,
            'supports'              => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'revisions', 'genesis-seo', 'genesis-cpt-archives-settings' ),
            'taxonomies'            => array( self::TAX_TAGS ),
            'hierarchical'          => false,
            'public'                => true,
            'show_ui'               => true,
            'show_in_menu'          => true,
            'menu_position'         => 5,
            'menu_icon'             => 'dashicons-format-aside',
            'show_in_admin_bar'     => true,
            'show_in_nav_menus'     => true,
            'can_export'            => true,
            'has_archive'           => self::PERMALINK,
            'exclude_from_search'   => false,
            'publicly_queryable'    => true,
            'rewrite'               => $rewrite,
            'capability_type'       => 'post',
        );
        register_post_type( self::POST_TYPE, $args );
    }

    public function _register_tax(){
        $labels = array(
            'name'                       => _x( 'Tags', 'Taxonomy General Name', 'colmt' ),
            'singular_name'              => _x( 'Tag', 'Taxonomy Singular Name', 'colmt' ),
            'menu_name'                  => __( 'News Tags', 'colmt' ),
            'all_items'                  => __( 'All Tags', 'colmt' ),
            'parent_item'                => __( 'Parent Tag', 'colmt' ),
            'parent_item_colon'          => __( 'Parent Tag:', 'colmt' ),
            'new_item_name'              => __( 'New Tag Name', 'colmt' ),
            'add_new_item'               => __( 'Add New Tag', 'colmt' ),
            'edit_item'                  => __( 'Edit Tag', 'colmt' ),
            'update_item'                => __( 'Update Tag', 'colmt' ),
            'view_item'                  => __( 'View Tag', 'colmt' ),
            'separate_items_with_commas' => __( 'Separate tags with commas', 'colmt' ),
            'add_or_remove_items'        => __( 'Add or remove tags', 'colmt' ),
            'choose_from_most_used'      => __( 'Choose from the most used', 'colmt' ),
            'popular_items'              => __( 'Popular Tags', 'colmt' ),
            'search_items'               => __( 'Search News Tags', 'colmt' ),
            'not_found'                  => __( 'Not Found', 'colmt' ),
            'no_terms'                   => __( 'No tags', 'colmt' ),
            'items_list'                 => __( 'Tags list', 'colmt' ),
            'items_list_navigation'      => __( 'Tags list navigation', 'colmt' ),
        );
        $rewrite = array(
            'slug'                       => 'news-tags',
            'with_front'                 => false,
            'hierarchical'               => false,
        );
        $args = array(
            'labels'                     => $labels,
            'hierarchical'               => false,
            'public'                     => true,
            'show_ui'                    => true,
            'show_admin_column'          => true,
            'show_in_nav_menus'          => false,
            'show_tagcloud'              => true,
            'rewrite'                    => $rewrite,
        );
        register_taxonomy( self::TAX_TAGS, array( self::POST_TYPE ), $args );
    }

    function _title_text( $title ){
        $screen = get_current_screen();

        if ( $screen->post_type != self::POST_TYPE )
            return $title;

        return __( 'Enter Article Title', 'colmt' );
    }

    public function archive_adjustments(){
        if( ! is_post_type_archive( self::POST_TYPE ) )
            return;

        //* Force Full Width Content Layout
        add_filter( 'genesis_pre_get_option_site_layout', '__genesis_return_full_width_content' );
    }

    public function get_related( $context, $post_id = NULL, $count = 1 ){
        $news_args = array(
            'post_type' => self::POST_TYPE,
            'post_status' => 'publish',
            'posts_per_page' => $count,
            'meta_query' => array(
                'relation' => 'AND',
                array(
                    'key' => $context . '-tags',
                    'value' => '"' . $post_id . '"', // wrap in quotes to match exact value in serialized field.
                    'compare' => 'LIKE'
                )
            )
        );

        return new WP_Query( $news_args );
    }

    /**
     * Display News Shortcode
     * @param  array  $atts    Shortcode Atts
     * @param  string $content Shortcode Content
     * @return string          HTML/Content
     */
    function display_news_shortcode( $atts = array(), $content = NULL ){
        $atts = shortcode_atts(
            array(
                'count' => 3,
                'context' => NULL,
                'format' => 'F j, Y',
                'more-text' => __( 'More News', 'colmt' ),
                'more-class' => 'more-news',
                'related' => NULL
            ), $atts, 'display-news' );

        if( $atts['related'] && $atts['context'] ){
            $news = $this->get_related( $atts['context'], $atts['related'], $atts['count'] );
        } else {
            $news_args = array(
                'post_type' => self::POST_TYPE,
                'post_status' => 'publish',
                'posts_per_page' => $atts['count']
            );

            $news = new WP_Query( $news_args );
        }

        if( ! $news->have_posts() )
            return '';

        $output = '<div class="news">';

        global $post;

        if( count( $news->posts ) < $atts['count'] )
            $atts['more-text'] = false;
        while( $news->have_posts() ): $news->the_post();
            $permalink = get_permalink();
            $excerpt = $post->post_excerpt ? get_the_excerpt() : get_the_title();
            $output .= '<div class="news-item">';
                $output .= '<div class="news-date">' . get_the_date( $atts['format'] ) . '</div>';
                $output .= '<div class="news-excerpt"><a href="' . esc_attr( $permalink ) . '">';
                    $output .= $excerpt;
                $output .= '</a></div>';
            $output .= '</div><!-- .news-item -->';
        endwhile;
        wp_reset_postdata();

        if( $atts['more-text'] ){
            $more_link = '/' . self::PERMALINK . '/';
            if( $atts['related'] && $atts['context'] )
                $more_link .= '?' . $atts['context'] . '=' . $atts['related'];
            $output .= '<p class="read-more-news"><a href="' . $more_link . '" class="' . esc_attr( $atts['more-class'] ) . '">' . $atts['more-text'] . '</a></p>';
        }

        $output .= '</div><!-- .news -->';

        return $output;
    }

    public function setup_sidebars(){
        /**
         * News Article (Singular) Sidebar
         */
        genesis_register_sidebar( array(
            'id'            => 'news-article',
            'name'          => __( 'News Article (Singular)', 'colmt' ),
            'description'   => __( 'This is displayed on singular News Article templates', 'colmt' ),
        ) );
    }

    function filter_news_archive( $q ){
        if( ! $q->is_main_query() )
            return;

        if( ! $q->is_post_type_archive( self::POST_TYPE ) )
            return;

        $args = $this->filter_news();
        $meta_query = $q->get('meta_query');
        if( ! is_array( $meta_query ) )
            $meta_query = array();

        unset( $args['meta_query']['relation'] );

        foreach( $args['meta_query'] as $mq ){
            $meta_query[] = $mq;
        }

        $meta_query['relation'] = 'OR';

        $q->set( 'meta_query', $meta_query );
    }

    public function filter_news( $args = array() ){

        if( ! is_post_type_archive( self::POST_TYPE ) )
            return $args;

        $meta_query = isset( $args['meta_query'] ) ? $args['meta_query'] : array();

        if( ! is_array( $meta_query ) )
            $meta_query = array();

        // apply filters
        if( isset( $_GET['practice-areas'] ) ){
            $practice_area_id = intval( $_GET['practice-areas'] );

            $meta_query[] = array(
                'key' => 'practice-areas-tags',
                'value' => '"' . $practice_area_id . '"',
                'compare' => 'LIKE'
            );
        }

        if( isset( $_GET['attorneys'] ) ){
            $attorney_id = intval( $_GET['attorneys'] );

            $meta_query[] = array(
                'key' => 'attorneys-tags',
                'value' => '"' . $attorney_id . '"',
                'compare' => 'LIKE'
            );
        }

        $args['meta_query']['relation'] = 'OR';
        $args['meta_query'] = $meta_query;

        return $args;
    }

}

The Practices Post Type:

<?php

if ( ! defined( 'ABSPATH' ) )
    exit;

if( class_exists( 'CT_Practice_Area' ) )
    return;

class CT_Practice_Area {

    const POST_TYPE = 'ct-practice-area';
    private static $_this;

    public function __construct( $post = NULL ){
        self::$_this = $this;

        if( is_object( $post ) ){
            foreach ( get_object_vars( $post ) as $key => $value )
                $this->$key = $value;
        }
    }

    public function get_post_type(){
        return self::POST_TYPE;
    }

    public function _init(){
        add_action( 'init', array( $this, '_register' ) );
        add_filter( 'enter_title_here', array( $this, '_title_text' ) );
        add_shortcode( 'practice-areas-list', array( $this, 'practice_areas_list_shortcode' ) );

        // bidirectional field syncs
        add_filter( 'acf/update_value/name=clients-tags', array( self::$_this, 'bidirectional_sync_practice_areas_tags' ), 10, 3 );
        add_filter( 'acf/update_value/name=practice-area-contacts', array( self::$_this, 'bidirectional_sync_attorney_practice_area_contacts' ), 10, 3 );
        add_filter( 'acf/update_value/name=practice-area-attorneys', array( self::$_this, 'bidirectional_sync_attorney_practice_areas' ), 10, 3 );

        //add_action( 'template_redirect', array( $this, 'disable_root_practice_areas' ) );

        add_action( 'init', array( $this, 'setup_sidebars' ) );

        add_filter( 'pre_get_posts', array( $this, 'archive_query_adjustments' ) );

        add_filter( 'get_previous_post_where', array( $this, 'exclude_parent_posts' ), 10, 5 );
        add_filter( 'get_next_post_where', array( $this, 'exclude_parent_posts' ), 10, 5 );

        add_image_size( 'practice-area-archive', 220, 110, true );
    }

    public function _register(){
        $labels = array(
            'name'                  => _x( 'Services', 'Post Type General Name', 'colmt' ),
            'singular_name'         => _x( 'Service', 'Post Type Singular Name', 'colmt' ),
            'menu_name'             => __( 'Services', 'colmt' ),
            'name_admin_bar'        => __( 'Services', 'colmt' ),
            'archives'              => __( 'Services', 'colmt' ),
            'parent_item_colon'     => __( 'Parent Service:', 'colmt' ),
            'all_items'             => __( 'All Services', 'colmt' ),
            'add_new_item'          => __( 'Add New Service', 'colmt' ),
            'add_new'               => __( 'Add New', 'colmt' ),
            'new_item'              => __( 'New Service', 'colmt' ),
            'edit_item'             => __( 'Edit Service', 'colmt' ),
            'update_item'           => __( 'Update Service', 'colmt' ),
            'view_item'             => __( 'View Service', 'colmt' ),
            'search_items'          => __( 'Search Services', 'colmt' ),
            'not_found'             => __( 'Not found', 'colmt' ),
            'not_found_in_trash'    => __( 'Not found in Trash', 'colmt' ),
            'featured_image'        => __( 'Featured Image', 'colmt' ),
            'set_featured_image'    => __( 'Set featured image', 'colmt' ),
            'remove_featured_image' => __( 'Remove featured image', 'colmt' ),
            'use_featured_image'    => __( 'Use as featured image', 'colmt' ),
            'insert_into_item'      => __( 'Insert into Service Description', 'colmt' ),
            'uploaded_to_this_item' => __( 'Uploaded to this Service', 'colmt' ),
            'items_list'            => __( 'Services list', 'colmt' ),
            'items_list_navigation' => __( 'Services list navigation', 'colmt' ),
            'filter_items_list'     => __( 'Filter Services list', 'colmt' ),
        );
        $rewrite = array(
            'slug'                  => 'practice-area',
            'with_front'            => false,
            'pages'                 => true,
            'feeds'                 => true,
        );
        $args = array(
            'label'                 => __( 'Practice Area', 'colmt' ),
            'description'           => __( 'Colmt Practice Areas', 'colmt' ),
            'labels'                => $labels,
            'supports'              => array( 'title', 'editor', 'excerpt', 'thumbnail', 'revisions', 'page-attributes', 'genesis-seo' ),
            'hierarchical'          => true,
            'public'                => true,
            'show_ui'               => true,
            'show_in_menu'          => true,
            'menu_position'         => 20,
            'menu_icon'             => 'dashicons-index-card',
            'show_in_admin_bar'     => true,
            'show_in_nav_menus'     => true,
            'can_export'            => true,
            'has_archive'           => 'practice-areas',
            'exclude_from_search'   => false,
            'publicly_queryable'    => true,
            'rewrite'               => $rewrite,
            'capability_type'       => 'post',
        );
        register_post_type( self::POST_TYPE, $args );
    }

    // function disable_root_practice_areas(){
    //  if( ! is_singular( self::POST_TYPE ) )
    //      return;

    //  $obj = get_queried_object();
    //  if( ! $obj->post_parent ){
    //      wp_redirect( '/practice-areas/' );
    //      exit();
    //  }
    // }

    function _title_text( $title ){
        $screen = get_current_screen();

        if ( $screen->post_type != self::POST_TYPE )
            return $title;

        return __( 'Enter Practice Area Name', 'colmt' );
    }

    public function bidirectional_sync_practice_areas_tags( $value, $post_id, $field ) {
        return ct_sync_field( 'practice-areas-tags', $value, $post_id, $field );
    }

    public function bidirectional_sync_attorney_practice_area_contacts( $value, $post_id, $field ) {
        return ct_sync_field( 'attorney-practice-area-contacts', $value, $post_id, $field );
    }

    public function bidirectional_sync_attorney_practice_areas( $value, $post_id, $field ) {
        return ct_sync_field( 'attorney-practice-areas', $value, $post_id, $field );
    }

    public function setup_sidebars(){

        genesis_register_sidebar( array(
            'id'            => 'practice-area',
            'name'          => __( 'Practice Area (Singular)', 'colmt' ),
            'description'   => __( 'This is displayed on singular Practice Area templates', 'colmt' ),
        ) );
    }

    public function archive_query_adjustments( $q ){
        if( is_admin() )
            return $q;

        if( ! $q->is_main_query() || ! $q->is_post_type_archive( self::POST_TYPE ) )
            return $q;

        $q->set( 'posts_per_page', '-1' );
        $q->set( 'post_parent', '0' );
        $q->set( 'orderby', 'menu_order title' );
        $q->set( 'order', 'ASC' );
    }

    public function get_children( $parent = NULL ){
        if( ! $parent )
            $parent = get_the_ID();

        $children_args = array(
            'post_type' => self::POST_TYPE,
            'post_parent' => $parent,
            'post_status' => 'publish',
            'posts_per_page' => '-1',
            'orderby' => 'menu_order post_title',
            'order' => 'ASC'
        );
        $children = new WP_Query( $children_args );

        return $children;
    }

    public function exclude_parent_posts( $where, $in_same_term, $excluded_terms, $taxonomy, $post ){
        if( get_post_type( $post ) != self::POST_TYPE )
            return $where;

        global $wpdb;
        $exclude_parents = 'p.post_parent != 0';
        $where .= $where ? ' AND ' . $exclude_parents : $exclude_parents;
        return $where;
    }

    public function practice_areas_list_shortcode( $atts = array(), $content = NULL ){
        $atts = shortcode_atts(
            array(
                'source' => NULL,
                'link-to-practice-area' => true,
                'attorney' => get_the_ID()
            ), $atts, 'practice-areas-list' );

        ct_boolean_atts( $atts );

        if( ! $atts['source'] )
            $atts['source'] = 'all';

        $output = '';
        $related_practice_areas = false;
        $practice_areas_args = array();

        if( $atts['source'] == 'attorney' ){
            $related_practice_areas = get_field( 'attorney-practice-areas', $atts['attorney'] );
            if( ! $related_practice_areas )
                return $output;
        } elseif( $atts['source'] == 'tagged' ){
            $related_practice_areas = get_field( 'practice-areas-tags' );
            if( ! $related_practice_areas )
                return $output;
        }

        if( $related_practice_areas ){
            $practice_area_ids = wp_list_pluck( $related_practice_areas, 'ID' );
            $practice_areas_args['post__in'] = $practice_area_ids;
            $practice_areas_args['orderby'] = 'post__in';
        }

        if( $atts['source'] == 'all' ){
            $practice_areas_args = array(
                'post_status' => 'publish',
                'post_type' => self::POST_TYPE,
                'posts_per_page' => '-1',
                'post_parent' => 0,
                'orderby' => 'menu_order post_title',
                'order' => 'asc'
            );

            $practice_areas = new WP_Query( $practice_areas_args );
        } else {
            $practice_areas = $this->get_practice_areas( $practice_areas_args );
        }

        if( $practice_areas->have_posts() ):
            $output .= '<ul class="practice-areas-list">';
                while( $practice_areas->have_posts() ): $practice_areas->the_post();
                    $title = ct_get_practice_area_title_with_icon( '%s %s' );

                    $line = $atts['link-to-practice-area'] && $atts['source'] != 'all' ? sprintf( '<a href="%s">%s</a>', get_permalink( get_the_ID() ), $title ) : sprintf( '<span>%s</span>', $title );

                    $output .= sprintf( '<li class="practice-area">%s', $line );

                    $children = $this->get_children( get_the_ID() );

                    if( $children->have_posts() && $atts['source'] == 'all' ):
                        $output .= '<ul class="child-practice-areas">';

                        while( $children->have_posts() ): $children->the_post();
                            $line = $atts['link-to-practice-area'] ? sprintf( '<a href="%s">%s</a>', get_permalink( get_the_ID() ), get_the_title() ) : sprintf( '<span>%s</span>', get_the_title() );
                            $output .= sprintf( '<li class="practice-area">%s</li>', $line );

                        endwhile;
                        wp_reset_postdata();
                        $output .= '</ul><!-- .child-practice-areas -->';
                    endif;

                    $output .= '</li>';
                endwhile;
                wp_reset_postdata();
            $output .= '</ul><!-- .practice-areas-list -->';

        endif;

        return $output;
    }

    public function get_practice_areas( $args = array() ){
        $practice_areas_args = array(
            'post_status' => 'publish',
            'post_type' => self::POST_TYPE,
            'posts_per_page' => '-1',
        );

        $practice_areas_args = array_merge( $practice_areas_args, $args );

        return new WP_Query( $practice_areas_args );
    }
}

Some filtering for news searches:

<?php

// add_filter( 'genesis_cpt_archive_intro_text_output', 'ct_insert_news_search' );


remove_action( 'genesis_before_loop', 'genesis_archive_title_description', 15 );
remove_action( 'genesis_before_loop', 'genesis_do_taxonomy_title_description', 15 );
add_action( 'genesis_before_loop', 'do_taxonomy_title_description', 16 );
add_filter( 'genesis_term_intro_text_output', 'ct_insert_news_search' );

add_filter( 'genesis_pre_get_option_site_layout', '__genesis_return_full_width_content' );


function do_taxonomy_title_description() {

    global $wp_query, $wp_embed; 

    if ( ! is_category() && ! is_tag() && ! is_tax() ) {
        return;
    }

    $term = is_tax() ? get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ) : $wp_query->get_queried_object();

    if ( ! $term ) {
        return;
    }

    $heading = get_term_meta( $term->term_id, 'headline', true );
    if ( empty( $heading ) ) {
        $heading = $term->name . " News";
    }

    $intro_text = get_term_meta( $term->term_id, 'intro_text', true );
    $intro_text = $wp_embed->autoembed( $intro_text );
    $intro_text = do_shortcode( $intro_text );
    $intro_text = wpautop( $intro_text );

    $intro_text = apply_filters( 'genesis_term_intro_text_output', $intro_text ? $intro_text : 'Filter news by keyword' );
    // $intro_text = apply_filters( 'genesis_term_intro_text_output', $intro_text ? $intro_text : '' );

    /**
     * Fires at end of doing taxonomy archive title and description.
     *
     * Allows you to reorganize output of the archive headings.
     *
     * @since 2.5.0
     *
     * @param string $heading    Archive heading.
     * @param string $intro_text Archive intro text.
     * @param string $context    Context.
     */
    do_action( 'genesis_archive_title_descriptions', $heading, $intro_text, 'taxonomy-archive-description' );

}


function ct_insert_news_search( $text ) {
    $post_type = CT()->news->get_post_type();
    $post_url = get_post_type_archive_link( $post_type );
    $clear_text_url = remove_query_arg( $post_type . '-filter', $post_url );

    $filters = '';

    if ( isset( $_GET['practice-areas'] ) ){
        $filters .= '<input type="hidden" name="practice-areas" value="' . esc_attr( intval( $_GET['practice-areas'] ) ) . '" />';
        $clear_text_url = add_query_arg( array( 'practice-areas' => intval( $_GET['practice-areas'] ) ), $clear_text_url );
    }
    if ( isset( $_GET['attorneys'] ) ){
        $filters .= '<input type="hidden" name="attorneys" value="' . esc_attr( intval( $_GET['attorneys'] ) ) . '" />';
        $clear_text_url = add_query_arg( array( 'attorneys' => intval( $_GET['attorneys'] ) ), $clear_text_url );
    }

    $search = '<form role="search" method="get" class="search-form" action="' . $post_url . '">
        <label>
            <a href="' . $clear_text_url . '" class="clear-search"><i class="fa fa-times"></i></a>
            <span class="screen-reader-text">' . strip_tags( $text ) . '</span>
            <input type="search" class="search-field" value="' . esc_attr( ct_get_news_search_string() ) . '" name="' . $post_type . '-filter" title="' . esc_attr( strip_tags( $text ) ) . '">
            ' . $filters . '
        </label>
        <input type="submit" class="search-submit" value="Search">
    </form>';

    $output = '<div class="news-search">' . $search . '</div>';

    return $output;
}


add_action( 'genesis_entry_header', 'ct_archive_featured_image', 2 );

function ct_archive_featured_image(){
    $featured = ct_get_featured_image( 'archive-featured' );
    if ( ! $featured )
        return;

    echo '<div class="featured-image">';
        echo '<img src="' . $featured[0] . '" />';
    echo '</div>';
}

remove_action( 'genesis_entry_header', 'genesis_post_info', 12 );
add_action( 'genesis_entry_header', 'genesis_post_info', 9 );
add_filter( 'genesis_post_info', 'ct_news_post_info' );

function ct_news_post_info( $post_info ) {
    $post_info = '[post_date] [post_edit]';
    return $post_info;
}

add_filter( 'genesis_post_meta', 'ct_news_post_meta' );


function ct_news_post_meta( $post_meta ) {
    $tags_list = get_the_term_list( get_the_ID(), CT()->news->get_tax_tags(), '', ', ' );
    $attorneys = get_field( 'attorneys-tags' );
    $practice_areas = get_field( 'practice-areas-tags' );



    $attorneys_list = array();
    $practice_areas_list = array();

    if ( is_array( $attorneys ) ){
        foreach( $attorneys as $attorney ){
            if ( ! $attorney )
                continue;
            $attorneys_list[] = '<a href="' . get_permalink( $attorney->ID ) . '">' . get_the_title( $attorney->ID ) . '</a>';
        }
    }

    if ( is_array( $practice_areas ) ){
        foreach( $practice_areas as $practice_area ){
            if ( ! $practice_area )
                //todo Jim
                echo($practice_area->ID);
                continue;
            $practice_areas_list[] = '<a href="' . get_permalink( $practice_area->ID ) . '">' . get_the_title( $practice_area->ID ) . '</a>';
        }
    }

    $post_meta = $tags_list;
    $post_meta .= $post_meta ? rtrim( ', ' . implode( ', ', $attorneys_list ), ', ' ) : implode( ', ', $attorneys_list );
    $post_meta .= $post_meta ? rtrim( ', ' . implode( ', ', $practice_areas_list ), ', ' ) : implode( ', ', $practice_areas_list );

    //echo($post_meta);
    return $post_meta;
}

add_action( 'genesis_before_loop', 'ct_news_archive_header', 17 );

function ct_news_archive_header(){

    $label = ct_get_news_search_string() ? __( 'News Search Results', 'colmt' ) : __( 'Most Recent News', 'colmt' );


    if ( isset( $_GET['attorneys'] ) ){
        //$attorney_name = get_field( 'attorney-goes-by', intval( $_GET['attorneys'] ) );
        $attorney_name = get_the_title( intval( $_GET['attorneys'] ) );
        $clear_filter_url = remove_query_arg( 'attorneys' );
        $label .= ' <span class="filtered-by"><em>' . __( 'about ', 'colmt' ) . '</em><strong>' . $attorney_name . '</strong><a href="' . esc_attr( $clear_filter_url ) . '"><i class="fa fa-times"></i></a></span>';
    }


        if ( isset( $_GET['practice_areas'] ) ){
        $practice_area = get_the_title( intval( $_GET['practice_areas'] ) );
        $clear_filter_url = remove_query_arg( 'practice_areas' );
        $label .= ' <span class="filtered-by"><em>' . __( 'about ', 'colmt' ) . '</em><strong>' . $practice_area . '</strong><a href="' . esc_attr( $clear_filter_url ) . '"><i class="fa fa-times"></i></a></span>';
    } else { $label .= ''; }


    echo '<div class="news-header">';
        echo sprintf( '<div class="subsection-heading news-heading">%s</div>', $label );
        echo sprintf( '<div class="subsection-heading tags-heading">%s</div>', __( 'Tags', 'colmt' ) );
    echo '</div>';
}

function ct_get_news_search_string(){
    return isset( $_REQUEST[ CT()->news->get_post_type() . '-filter' ] ) ? sanitize_text_field( $_REQUEST[ CT()->news->get_post_type() . '-filter' ] ) : '';
}

remove_all_actions( 'genesis_before_entry_content' );
remove_all_actions( 'genesis_entry_content' );
remove_all_actions( 'genesis_after_entry_content' );

if ( ct_get_news_search_string() && class_exists( 'SWP_Query' ) ){
    remove_action( 'genesis_loop', 'genesis_do_loop' );
    add_action( 'genesis_loop', 'ct_news_archive_search' );
    remove_action( 'genesis_after_endwhile', 'genesis_posts_nav' );
}

function ct_news_archive_search(){

    // retrieve our search query if applicable
    $query = ct_get_news_search_string();

    // retrieve our pagination if applicable
    $current_page = isset( $_REQUEST[ CT()->news->get_post_type() . '-page'] ) ? absint( $_REQUEST[ CT()->news->get_post_type() . '-page'] ) : 1;

    $engine = 'news'; // taken from the SearchWP settings screen

    // see all args at https://searchwp/docs/swp_query/
    $news_query = new SWP_Query( array(
        's'      => $query,
        'engine' => $engine,
        'page'   => $current_page,
    ) );

    // set up pagination
    $pagination = paginate_links( array(
        'format'  => '?' . CT()->news->get_post_type() . '-page=%#%',
        'current' => $current_page,
        'total'   => $news_query->max_num_pages,
    ) );


    if ( ! empty( $news_query->posts ) ):

        global $post;

        do_action( 'genesis_before_while' );
        foreach ( $news_query->posts as $post ):

            setup_postdata( $post );

            do_action( 'genesis_before_entry' );

            printf( '<article %s>', genesis_attr( 'entry' ) );

                do_action( 'genesis_entry_header' );

                do_action( 'genesis_entry_footer' );

            echo '</article>';

            do_action( 'genesis_after_entry' );

        endforeach; //* end of one post
        wp_reset_postdata();

        do_action( 'genesis_after_endwhile' );

        if ( $news_query->max_num_pages > 1 ): ?>
            <div class="navigation pagination" role="navigation">
                <h2 class="screen-reader-text">Posts navigation</h2>
                <div class="nav-links">
                    <?php echo wp_kses_post( $pagination ); ?>
                </div>
            </div>
        <?php endif;

    else :
        do_action( 'genesis_loop_else' );
    endif; 

genesis();


Share Improve this question edited Apr 30, 2020 at 16:57 Jim asked Apr 9, 2020 at 18:43 JimJim 11 bronze badge 9
  • I suggest you give more information before we could help you such as (1)source code, (2)what version you used before and now. Because if it is version-related, versions information are very important. And do you have backup? If you do, did you try to restore an older version in a local test server to see if this problem occur for comparison? – 西門 正 Code Guy - JingCodeGuy Commented Apr 10, 2020 at 0:09
  • Thank you @simongcc. I was hoping someone may have seen this before and would know where to start. I'll try to pull in more detail. – Jim Commented Apr 11, 2020 at 17:17
  • You may try to intercept the process of update and compare the operation difference. It seems to me that it is related the order of operation. You can make use of var_dump and exit to see where does this SQL fire so that you will know how to stop it or avoid it. – 西門 正 Code Guy - JingCodeGuy Commented Apr 14, 2020 at 0:04
  • Since I'm still struggling with this, I've edited the post to include code for each post type and the new taxonomy. Any ideas would be greatly appreciated. – Jim Commented Apr 30, 2020 at 16:08
  • Should also add that I'm using the Genesis Framework and WordPress 5.4.1 – Jim Commented Apr 30, 2020 at 16:14
 |  Show 4 more comments

1 Answer 1

Reset to default 0

This was caused by two ACF field groups having the same field slug. Took some digging.

发布评论

评论列表(0)

  1. 暂无评论