Richiesta di tassonomia personalizzata interrotta dopo l'aggiornamento a 4.4


9

Ho appena aggiornato da 4.2 a 4.4 e ora la mia query di tassonomia ritorna vuota. Ha funzionato bene prima dell'aggiornamento.

Ho registrato una tassonomia personalizzata denominata 'title', che viene utilizzata dal mio tipo di post personalizzato 'sg-publications'. Seguendo la gerarchia dei modelli WP ho creato un modello chiamato taxonomy-title.phpche utilizza gli argomenti di query predefiniti e fino ad ora ha mostrato correttamente ogni pubblicazione in base al titolo.

Ecco l'output di $ queried_object e $ wp_query-> richiesta in quel modello:

[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 

Il problema che vedo nella query sopra è subito dopo WHERE 1=1, per qualche motivo che sta cercando post_title = 'stroupe-scoop'. Questo non è corretto - questo è il termine lumaca tassonomia, non il titolo del post. In effetti, quando commento quella riga ed eseguo sul database ottengo i ritorni corretti. Quindi cosa sta causando l'aggiunta di questa condizione a WP, quando (suppongo) non lo stava aggiungendo prima di passare a 4.4?

Ecco taxonomy-title.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();

E in Functions.php ho questo filtro di query:

// 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 );

Dov'è il codice della query? Se è nel modello, perché non rimuovi semplicemente la parte che lo sta rompendo? In caso contrario, cosa hai usato per generare la query?
montrealista,

Non esiste un codice di query personalizzato, sto usando il ciclo predefinito WP. Poiché sto seguendo la Gerarchia dei modelli, WP dovrebbe (e deve, prima dell'aggiornamento) generare i parametri di query corretti per la mia tassonomia.
Gary D,

2
Qual è il tuo contenuto taxonomy-title.php? Hai cercato nei temi functions.phpper verificare se ci sono filtri nella query principale?
montrealista,

Risposte:


5

Non consiglierei di usare una lumaca di tassonomia che coincida con le variabili di query pubbliche, come title.

La title variabile di query è stata introdotta in 4.4, quindi penso che ciò possa spiegare i tuoi problemi.

Dai un'occhiata a questa parte della WP_Queryclasse:

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

Quindi quando usiamo per esempio:

example.tld/?title=test

cosa dovrebbe fare WordPress qui? È una query di tassonomia o una ricerca per titolo?

Quindi consiglierei il prefisso della lumaca della tassonomia personalizzata, ad es

gary_title

per evitare possibili collisioni di nomi.

Aggiornare:

Grazie a @ ocean90 per aver sottolineato che si tratta di un bug, che verrà risolto in 4.4.1


2
Grazie per il testa a testa sul cambiamento in 4.4 - Avevo il sospetto che potesse essere un conflitto di denominazione. Seguirò una volta che eseguirò alcuni test.
Gary D,

Fino a poche versioni fa, non era possibile registrare un tipo di post code, poiché ciò rendeva l'intero backend dell'amministratore monospaziato. I nomi generici sono sempre candidati alla collisione. D'altra parte, WordPress dovrebbe aggiungere il prefisso ai propri interni.
fuxia

Sì, era quello. Una volta modificato il termine della tassonomia e i nomi dei file correlati in uno schema non in conflitto, tutto è tornato. Grazie ancora per avermi indicato il codice WP aggiornato.
Gary D,

felice di sentire che è attivo e funzionante di nuovo @GaryD
birgire il

bello, devo provarlo quando metto le mani su una vecchia installazione ;-) Sicuramente supporterò quel biglietto prefisso, ma non vedo che succederà nel prossimo futuro, purtroppo @toscho
birgire
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.