Niestandardowe zapytanie taksonomiczne zepsute po aktualizacji do 4.4

9

Właśnie uaktualniłem z 4.2 do 4.4, a teraz moje zapytanie dotyczące taksonomii zwraca puste. Przed aktualizacją działał dobrze.

Zarejestrowałem niestandardową taksonomię o nazwie 'title', która jest używana przez mój niestandardowy typ postu 'sg-publications'. Postępując zgodnie z hierarchią szablonów WP, stworzyłem szablon o nazwie, taxonomy-title.phpktóry używa domyślnych argumentów zapytania i do tej pory poprawnie wyświetlał każdą publikację według tytułu.

Oto dane wyjściowe $ queried_object i $ wp_query-> żądania w tym szablonie:

[queried_object] => WP_Term Object
    (
        [term_id] => 1256
        [name] => Stroupe Scoop
        [slug] => stroupe-scoop
        [term_group] => 0
        [term_taxonomy_id] => 1374
        [taxonomy] => title
        [description] => 
        [parent] => 0
        [count] => 30
        [filter] => raw
    )

[queried_object_id] => 1256

[request] => 
SELECT wp_posts.* 
FROM wp_posts 
INNER JOIN wp_term_relationships 
ON (wp_posts.ID = wp_term_relationships.object_id) 
WHERE 1=1 
AND wp_posts.post_title = 'stroupe-scoop' 
AND ( 
    wp_term_relationships.term_taxonomy_id 
    IN (1374)
    ) 
AND wp_posts.post_type = 'sg-publications' 
AND (wp_posts.post_status = 'publish' 
    OR wp_posts.post_status = 'private'
    ) 
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_date 
DESC 

Problem, który widzę w powyższym zapytaniu jest zaraz po nim WHERE 1=1, z jakiegoś powodu szuka post_title = 'stroupe-scoop'. To nie jest poprawne - to określenie ślimak termin taksonomia, a nie tytuł stanowiska. W rzeczywistości, kiedy komentuję ten wiersz i uruchamiam go w bazie danych, otrzymuję właściwe zwroty. Co więc powoduje, że WP dodaje ten warunek, kiedy (zakładam) nie dodawał go przed uaktualnieniem do wersji 4.4?

Oto taksonomia-tytuł.php:

<?php
/**
 * @package WordPress
 * @subpackage Chocolate
 */
  global $wp_query;

  $quer_object = get_queried_object();
  $tax_desc    = $quer_object->description;
  $tax_name    = $quer_object->name;
  $tax_slug    = $quer_object->slug;

get_header();
get_sidebar();

$title = get_the_title( $ID );
$args  = array(
    'menu'            => 'new-publications',
    'container'       => 'div',
    'container_id'    => $tax_slug . '-menu',
    'menu_class'      => 'menu-top-style nav nav-tab',
    'menu_id'         => '',
    'echo'            => true,
    'fallback_cb'     => false,
    'before'          => '',
    'after'           => '',
    'link_before'     => '<i class="fa fa-chevron-circle-right fa-fw fa-2x"></i>',
    'link_after'      => '',
    'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
    'depth'           => 0,
    'walker'          => ''
);

?>

<div id="page-title">
  <h1><?php _e( 'Publications - ' . $tax_name, LANGUAGE_ZONE ); ?></h1>
  <p><?php _e( 'View our monthly newsletter and stay informed on the latest real estate news.', LANGUAGE_ZONE ); ?></p>

<?php wp_nav_menu($args); ?>

</div>

<div id="multicol">

<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();

get_template_part( 'loop' , 'title' );

endwhile;
endif;
?>

</div><!-- end #multicol -->
<section class="page-text well"><?php _e( $tax_desc, LANGUAGE_ZONE ); ?></section>

<?php
get_footer();

A w functions.php mam ten filtr zapytań:

// use pre_get_posts to remove pagination from publications
function gd_publications_pagination( $query ) {
  if ( is_admin() || ! $query->is_main_query() )
    return;

  if ( is_tax('title') ) {
    // Display all posts for the taxonomy called 'title'
    $query->set( 'posts_per_page', -1 );
    return;
  }
}
add_action( 'pre_get_posts', 'gd_publications_pagination', 1 );
Gary D.
źródło
Gdzie jest kod zapytania? Jeśli jest w twoim szablonie, dlaczego po prostu nie usuniesz części, która go łamie? Jeśli nie, to czego użyłeś do wygenerowania zapytania?
montrealist
Nie ma niestandardowego kodu zapytania, używam domyślnej pętli WP. Ponieważ postępuję zgodnie z hierarchią szablonów, WP powinien (i przed aktualizacją powinien) wygenerować poprawne parametry zapytania dla mojej taksonomii.
Gary D
2
Jaka jest twoja zawartość taxonomy-title.php? Czy szukałeś motywów, functions.phpaby sprawdzić, czy w głównym zapytaniu są jakieś filtry?
montrealist

Odpowiedzi:

5

Nie polecałbym używania informacji o taksonomii, która pokrywa się ze zmiennymi zapytania publicznego, np title.

title Zmienna zapytanie zostało wprowadzone w 4.4 więc myślę, że może wyjaśnić swoje problemy.

Sprawdź tę część w WP_Queryklasie:

    if ( '' !== $q['title'] ) {
        $where .= $wpdb->prepare( 
            " AND $wpdb->posts.post_title = %s", 
            stripslashes( $q['title'] ) 
        );
    }

Kiedy więc używamy na przykład:

example.tld/?title=test

co powinien tutaj zrobić WordPress? Czy to kwerenda taksonomiczna lub wyszukiwanie tytułu?

Zalecałbym więc prefiksowanie niestandardowego ślimaka taksonomii, np

gary_title

aby uniknąć możliwych kolizji nazw.

Aktualizacja:

Dzięki @ ocean90 za wskazanie, że jest to błąd, który zostanie naprawiony w 4.4.1

birgire
źródło
2
Dzięki za informacje na temat zmiany w wersji 4.4 - podejrzewałem, że może to być konflikt nazw. Będę śledzić, gdy przeprowadzę kilka testów.
Gary D,
Jeszcze kilka wersji temu nie można było zarejestrować typu postu code, ponieważ to sprawiło, że cały backend administratora był monospaced. Nazwy ogólne są zawsze kandydatami do kolizji. Z drugiej strony WordPress powinien prefiksować własne elementy wewnętrzne.
fuxia
Tak, to było to. Gdy zmieniłem termin taksonomii i powiązane nazwy plików na program nie powodujący konfliktu, wszystko wróciło. Jeszcze raz dziękuję za wskazanie mi zaktualizowanego kodu WP.
Gary D
Cieszę się, że znów działa i działa @GaryD
birgire
fajnie, muszę to przetestować, kiedy zdobędę starą instalację ;-) Zdecydowanie poparłbym ten bilet z prefiksem, ale nie widzę, żeby to się działo w najbliższej przyszłości, niestety @toscho
birgire