PROBLEME: J'essaie d'empêcher l'exécution d'une requête WordPress par défaut pour un modèle de catégorie personnalisé. J'ai trouvé une solution possible, mais il semble que cela empêche l'exécution de toutes les requêtes de publication:
function _cancel_query( $query ) {
if ( !is_admin() && !is_feed() && is_search() ) {
$query = false;
}
return $query;
}
add_action( 'posts_request', '_cancel_query' );
Source: http://vadimk.com/2010/05/11/disable-wordpress-search-query/
'@ query-> is_main_query ()' ne fonctionnera pas avec l'action 'posts_request'. Existe-t-il un moyen élégant d’empêcher SEULEMENT les requêtes WordPress par défaut, permettant à mon code de gérer l’obtention de publications, sans effectuer d’opérations inutiles?
POURQUOI: Je dois obtenir les publications en vedette, puis un montant fixe de publications normales sans contenu en double, ce qui implique que la requête en publication repose sur les résultats de la requête en vedette, car rien ne garantit que je trouve assez de messages en vedette pour remplir la boîte en vedette. Après tout, je devrai ajouter AJAX pagination - toujours sans contenu dupliqué.
EDIT # 2: Si vous essayez d'exécuter WP_Query dans 'pre_get_posts' comme suggéré par Rarst ( Comment empêcher l'exécution d'une requête par défaut tout en préservant la possibilité d'utiliser WP_Query dans un modèle? ):
"pre_get_posts s'exécute avant que WP_Query ait été configuré. Certaines balises de modèle et certaines fonctions conditionnelles qui dépendent de WP_Query ne fonctionneront pas. Par exemple, is_front_page () ne fonctionnera pas, bien que is_home () fonctionne. Dans ce cas, vous devrez travailler directement avec les vars de requête, qui sont passés au crochet pre_get_posts en tant qu’argument ($ query dans les exemples de cette page). "
Source: https://codex.wordpress.org/Class_Reference/WP_Query
WP_Query sera initialisé à ce stade, avant la requête principale, et pour éviter un résultat comme celui-ci (consulter le journal), vous devez l'envelopper:
if ($query->is_main_query()) {
$args = array();
$query = new WP_Query( $args );
}
LOG:
[30-Apr-2013 17:07:12 UTC] PHP Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\Users\serwis\Dropbox\www\XYZ\wp-includes\functions.php on line 2769
[30-Apr-2013 17:07:12 UTC] PHP Stack trace:
[30-Apr-2013 17:07:12 UTC] PHP 1. {main}() C:\Users\serwis\Dropbox\www\XYZ\index.php:0
[30-Apr-2013 17:07:12 UTC] PHP 2. require() C:\Users\serwis\Dropbox\www\XYZ\index.php:17
[30-Apr-2013 17:07:12 UTC] PHP 3. wp() C:\Users\serwis\Dropbox\www\XYZ\wp-blog-header.php:14
[30-Apr-2013 17:07:12 UTC] PHP 4. WP->main() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\functions.php:779
[30-Apr-2013 17:07:12 UTC] PHP 5. WP->query_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\class-wp.php:549
[30-Apr-2013 17:07:12 UTC] PHP 6. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\class-wp.php:485
[30-Apr-2013 17:07:12 UTC] PHP 7. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 8. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 9. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 10. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 11. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 12. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 13. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 14. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 15. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 16. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 17. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 18. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 19. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 20. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 21. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 22. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 23. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 24. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 25. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 26. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 27. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 28. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 29. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 30. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 31. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 32. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 33. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 34. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 35. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 36. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 37. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 38. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 39. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 40. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 41. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 42. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 43. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 44. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 45. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 46. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 47. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 48. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 49. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 50. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 51. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 52. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 53. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 54. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 55. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 56. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 57. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 58. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 59. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 60. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 61. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 62. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 63. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 64. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 65. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 66. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 67. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 68. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 69. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 70. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 71. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 72. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 73. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 74. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 75. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 76. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 77. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 78. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 79. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 80. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 81. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 82. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 83. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 84. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 85. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 86. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 87. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 88. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 89. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 90. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 91. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 92. do_action_ref_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1924
[30-Apr-2013 17:07:12 UTC] PHP 93. call_user_func_array() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 94. gs_pre_get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\plugin.php:487
[30-Apr-2013 17:07:12 UTC] PHP 95. WP_Query->__construct() C:\Users\serwis\Dropbox\www\XYZ\wp-content\themes\roots-XYZ\lib\custom.php:14
[30-Apr-2013 17:07:12 UTC] PHP 96. WP_Query->query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:3059
[30-Apr-2013 17:07:12 UTC] PHP 97. WP_Query->get_posts() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:2972
[30-Apr-2013 17:07:12 UTC] PHP 98. WP_Query->parse_query() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1922
[30-Apr-2013 17:07:12 UTC] PHP 99. absint() C:\Users\serwis\Dropbox\www\XYZ\wp-includes\query.php:1442
Annuler complètement la requête principale est une folie de haut niveau qui implique de sous-classer la classe wp
.
Je voudrais:
pre_get_posts
avec la vérification is_main_query()
Je sais qu'il est peut-être un peu tard pour répondre, mais je suis tombé sur un problème similaire lors de la réalisation de mon projet test. Voici comment je l'ai résolu.
/* apply this filter only on relevant to you pages */
function mb_bail_main_wp_query( $sql, WP_Query $wpQuery ) {
if ( $wpQuery->is_main_query() ) {
/* prevent SELECT FOUND_ROWS() query*/
$wpQuery->query_vars['no_found_rows'] = true;
/* prevent post term and meta cache update queries */
$wpQuery->query_vars['cache_results'] = false;
return false;
}
return $sql;
}
add_filter( 'posts_request', 'mb_bail_main_wp_query', 10, 2 );
@METTRE À JOUR:
Le code a été modifié pour utiliser la fonction normale au lieu de la fonction anonyme et a fait que le code renvoyé était 'false' au lieu de 'SELECT 0 AS ID' car il renvoyait un objet WP_Post factice vide. Si vous retournez 'false', $ wpdb-> get_results () sera libéré plus tôt afin qu'aucune requête ne soit faite.