Ich habe gerade ein Upgrade von 4.2 auf 4.4 durchgeführt und jetzt ist meine Taxonomie-Abfrage leer. Es hat vor dem Upgrade einwandfrei funktioniert.
Ich habe eine benutzerdefinierte Taxonomie mit dem Namen registriert 'title'
, die von meinem benutzerdefinierten Beitragstyp verwendet wird 'sg-publications'
. In Anlehnung an die WP-Vorlagenhierarchie habe ich eine Vorlage mit dem Namen erstellt, taxonomy-title.php
die die Standardabfrage-Argumente verwendet und bis jetzt jede Veröffentlichung anhand ihres Titels korrekt angezeigt hat.
Hier ist die Ausgabe von $ queried_object und $ wp_query-> request in dieser Vorlage:
[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
Das Problem, das ich in der obigen Abfrage sehe, ist direkt danach WHERE 1=1
, aus irgendeinem Grund sucht es post_title = 'stroupe-scoop'
. Dies ist nicht korrekt - das ist der Taxonomiebegriff slug, nicht der Titel des Beitrags. Wenn ich diese Zeile auskommentiere und sie für die Datenbank ausführe, erhalte ich die richtigen Rückgaben. Was veranlasst WP also, diese Bedingung hinzuzufügen, wenn (ich nehme an) es nicht hinzugefügt wurde, bevor ich auf 4.4 aktualisiert habe?
Hier ist 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();
Und in functions.php habe ich diesen Abfragefilter:
// 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 );
taxonomy-title.php
? Haben Sie in den Themenfunctions.php
nachgesehen, ob die Hauptabfrage Filter enthält?Antworten:
Ich würde nicht empfehlen, einen Taxonomie-Slug zu verwenden, der mit den öffentlichen Abfragevariablen übereinstimmt, wie z
title
.Die
title
Abfragevariable wurde in 4.4 eingeführt, daher denke ich, dass dies Ihre Probleme erklären könnte.Schauen Sie sich diesen Teil der
WP_Query
Klasse an:Also, wenn wir zum Beispiel verwenden:
Was soll WordPress hier tun? Handelt es sich um eine Taxonomieabfrage oder eine Titelsuche?
Also ich würde empfehlen prefixing die benutzerdefinierte Taxonomie Slug, zB
um mögliche Namenskollisionen zu vermeiden.
Aktualisieren:
Vielen Dank an @ ocean90 für den Hinweis, dass dies ein Fehler ist, der in 4.4.1 behoben wird
quelle
code
, da das gesamte Admin-Backend dadurch monospaced wurde. Generische Namen sind immer Kollisionskandidaten. Auf der anderen Seite sollte WordPress seine eigenen Interna voranstellen.