Table des matières
Analyse des problèmes
Solution
Explication du code
Choses à noter
Résumer
Maison interface Web tutoriel HTML Solution WP_Query personnalisée WooCommerce pour une erreur tout en obtenant les détails de la commande

Solution WP_Query personnalisée WooCommerce pour une erreur tout en obtenant les détails de la commande

Oct 08, 2025 pm 11:57 PM

Solution WP_Query personnalisée WooCommerce pour une erreur tout en obtenant les détails de la commande

Cet article vise à résoudre 500 problèmes d'erreur rencontrés lors de l'utilisation de WP_Query pour personnaliser les détails de la commande de question de requête. En analysant le code du problème, en fournissant des exemples de code fixe et en expliquant la logique du code et des précautions en détail, en aidant les développeurs à utiliser correctement WP_Query pour obtenir et afficher les données de commande WooCommerce, et implémenter des fonctions telles que la pagination. Cet article fournit également des exemples de code optimisés pour faciliter la compréhension et le maintien de la compréhension.

Il y a souvent des problèmes lors de l'utilisation de WP_Query pour obtenir des détails de commande WooCommerce, surtout en ce qui concerne les appels Ajax et les capacités de pagination. Une erreur de 500 se produit généralement parce qu'une variable ou une méthode incorrecte est utilisée à l'intérieur de la boucle pour obtenir des informations de commande. Les détails suivants sur la façon d'utiliser correctement WP_Query pour obtenir les détails de la commande WOOCommerce et fournir une solution viable.

Analyse des problèmes

Il y a plusieurs problèmes dans le code d'origine:

  1. ID de commande incorrect Méthode d'obtention: obtenir l'ID de commande avec $ LOOP-> Post-> ID est incorrect dans la boucle WP_Query. La fonction get_the_id () doit être utilisée.
  2. Répéter la requête: deux instances WP_Query sont utilisées dans le code, l'une pour la boucle et l'autre pour le comptage. Cela peut conduire à des frais généraux inutiles.
  3. La logique de pagination est complexe: la logique de pagination peut être simplifiée et la pagination peut être plus pratiquement implémentée à l'aide du paramètre PAGE de WP_Query.
  4. Mauvaise lisibilité au code: la structure du code peut être optimisée pour le rendre plus facile à comprendre et à maintenir.

Solution

Voici un exemple de code fixe qui résout le problème ci-dessus et fournit un moyen plus clair de l'implémenter:

fonctions.php

  Php

add_action ('wp_ajax_demo_pagination_posts', 'démo_pagination_posts');
add_action ('wp_ajax_nopriv_demo_pagination_posts', 'Demo_pagination_posts');

fonction démo_pagination_posts () {
    Global $ WPDB;

    if (isset ($ _post ['page'])) {
        // désinfecter et valider le numéro de page
        $ page = max (intval ($ _post ['page']), 1);
        $ per_page = 4; // Nombre de commandes par page

        // wp_query pour récupérer les commandes de la boutique avec pagination
        $ args = array (
            'post_type' => 'shop_order',
            'post_status' => 'wc complété',
            'orderby' => 'post_date',
            'order' => 'desc',
            'Posts_per_page' => $ per_page,
            «Paged» => $ Page, // Utilisez le paramètre «Paged» pour la pagination
        ));

        $ loop = new WP_Query ($ args);
        $ count = $ loop-> find_posts; // Nombre total de postes trouvés

        $ msg = '';

        if ($ loop-> have_posts ()) {
            while ($ loop-> have_posts ()) {
                $ loop-> the_post ();

                // Obtenez l'ID de commande
                $ order_id = get_the_id ();

                // Obtenez une instance de l'objet WC_Order
                $ ordonnance = wc_get_order ($ order_id);

                if ($ ordonnance) {
                    $ items = $ ordonnance-> get_items ();
                    $ orders_id = $ ordonnance-> get_id ();
                    $ status = wc_get_order_status_name ($ ordonnance-> get_status ());
                    $ date_created = $ command-> get_date_created () -> date ('d / m / y');
                    $ PAYS_METHOD = $ ordonnance-> get_payment_method_title ();
                    $ order_total = $ ordonnance-> get_formatted_order_total ();

                    foreach ($ articles comme $ item) {
                        $ product_name = $ item-> get_name ();
                        $ View_order = $ commander-> get_view_order_url ();
                        $ product = $ item-> get_product ();

                        if ($ instance produitof wc_product) {
                            $ commander_img = $ product-> get_image ();
                            $ downloads = $ commander-> get_downloadable_items ();
                            $ download_button = '';

                            if (is_array ($ downloads)) {
                                foreach ($ téléchargements comme $ produit) {
                                    $ download_button = '<a href="'.%20%24%20Product%20%5B't%C3%A9l%C3%A9chargement_url'%5D.%20'" target="_ Blank"> Télécharger </a>';
                                }
                            }

                            $ msg. = '
                                
table> ';; } } } } } // Logique de pagination $ pages_num = intVal (ceil ($ COUNT / $ PER_PAGE)); $ is_last_page = $ pages_num == $ page; $ is_first_page = $ page === 1; $ pagination_html = "
"; $ pagination_html. = "
    "; if (! $ is_first_page) { $ pagination_html. = "
  • Précédent
  • "; } autre { $ pagination_html. = "
  • Précédent
  • "; } // Afficher les numéros de page $ start_loop = max (1, $ page - 3); $ end_loop = min ($ pages_num, $ page 3); pour ($ i = $ start_loop; $ i {$ i} "; } autre { $ pagination_html. = "
  • {$ i}
  • "; } } if (! $ is_last_page) { $ pagination_html. = "
  • suivant
  • "; } autre { $ pagination_html. = "
  • suivant
  • "; } $ pagination_html. = "
"; $ pagination_html. = " div>"; echo '
'. $ msg. '
'; echo '
'. $ pagination_html. '
'; wp_reset_postData (); // Réinitialiser les données du post global } mourir(); }

personnalité-template.php

 <div class="wrap">
    <div id="primaire" class="Content-Area">
        <div class="Col-MD-12 Content">
            <div class="Contenu de la boîte intérieure sans marge à droite darkviolet">
                <script type="text / javascript">
                    jQuery (document) .ready (fonction ($) {
                        // Ceci est requis pour que l&#39;Ajax travaille sur notre page
                        var ajaxurl = &#39;<? php echo admin_url (&#39; admin-ajax.php &#39;); ?> &#39;;

                        fonction load_all_posts (page) {
                            var data = {
                                Page: page,
                                Action: "Demo_pagination_posts"
                            };

                            $ .post (ajaxurl, données, fonction (réponse) {
                                $ (". Pagination_Container"). Html (réponse);
                            });
                        }

                        load_all_posts (1); // Chargez la page 1 comme par défaut

                        $ (document) .on (&#39;click&#39;, &#39;.pagination-link ul li&#39;, function () {
                            var page = $ (this) .attr (&#39;data-pagenenum&#39;);
                            load_all_posts (page);
                        });
                    });
                
                <div class = "pag_loading">
                    <div class = "Pagination_Container">
                        <div class = "post-contenu"> </script>
</div>
                    </div>
                </div>
            </div>
        

Explication du code

  1. Utilisez get_the_id () pour obtenir l'ID de commande: à l'intérieur de la boucle WP_Query, utilisez la fonction get_the_id () pour obtenir l'ID de l'ordre actuel.
  2. Utilisez le paramètre Paged pour paginer: le paramètre Paged de WP_Query est utilisé pour spécifier le numéro de page actuel, en simplifiant la logique de pagination.
  3. Logique de pagination simplifiée: la logique de pagination est simplifiée, en utilisant les fonctions max () et min () pour déterminer les numéros de page de début et de page de la boucle.
  4. Structure HTML: La structure HTML est optimisée pour le rendre plus facile à lire et à maintenir.
  5. Gestion des erreurs: Ajout d'un jugement sur l'objet de commande $ pour garantir que l'objet de commande existe.
  6. Utilisez WP_RESET_POSTDATA (): Après la boucle WP_Query, appelez la fonction WP_RESET_POSTDATA () pour restaurer l'objet Global $ post.

Choses à noter

  • Assurez-vous que votre version de WooCommerce est à jour pour éviter les problèmes de compatibilité potentiels.
  • Lors du traitement des données de commande, il est important d'effectuer une vérification appropriée et de s'échapper pour éviter les violations de sécurité.
  • Ajustez la quantité de commande affichée sur chaque page en fonction des besoins réels.
  • Optimiser les demandes AJAX et réduire la charge du serveur.
  • Utilisez les outils du développeur du navigateur pour déboguer les demandes et les réponses AJAX.

Résumer

Grâce à cet article, vous devriez être en mesure de comprendre comment utiliser correctement WP_Query pour obtenir des détails de commande WooCommerce et implémenter des fonctions telles que le chargement de la pagination. L'exemple de code fixe résout les problèmes qui existaient dans le code d'origine et fournit un moyen plus clair de l'implémenter. N'oubliez pas de suivre les meilleures pratiques pour vous assurer que votre code est sûr, efficace et facile à entretenir.

Ordine # '. ESC_ATTR ($ ORDERS_ID). ' prodotto '. WP_KESS_POST ($ product_name). ' data '. wp_kses_post ($ date_created). ' prezzo '. WP_KESS_POST ($ ORDER_TOTAL). ' stato '. WP_KESS_POST ($ Status). ' fichier Visualizza

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Conseils CSS: Masquer précisément le contenu texte spécifique sans affecter les éléments parentaux Conseils CSS: Masquer précisément le contenu texte spécifique sans affecter les éléments parentaux Sep 16, 2025 pm 10:54 PM

Ce tutoriel détaille comment utiliser CSS pour masquer avec précision le contenu de texte spécifique dans les pages HTML pour éviter que le problème de l'ensemble de l'élément parent soit caché en raison de sélecteurs inappropriés. En ajoutant des classes CSS exclusives aux éléments d'emballage du texte cible et en utilisant l'affichage: aucun; Attribut, les développeurs peuvent obtenir un contrôle raffiné des éléments de page, en veillant à ce que seules les pièces requises soient masquées, optimisant ainsi la mise en page et l'expérience utilisateur.

Comment créer un hyperlien vers une adresse e-mail dans HTML? Comment créer un hyperlien vers une adresse e-mail dans HTML? Sep 16, 2025 am 02:24 AM

Usemailto: inhreftocreateeemaillinks.startwithforbasiclinks, ajouter? Sujet = & body = forpre-fillutContent, andincludemultipleaddressorcc =, bcc = foradvancedOptions.

Comment faire du texte enroulé autour d'une image en HTML? Comment faire du texte enroulé autour d'une image en HTML? Sep 21, 2025 am 04:02 AM

USECSSFLOATPROPERTYTOWRAPTextArnanImage: FloatleftFortExtontheRight, FloatRightFortExtontheLeft, AddmarginForspacing, etClearFloatStopReventLayEtLaySues.

Comment ajouter une info-bulle sur Hover en HTML? Comment ajouter une info-bulle sur Hover en HTML? Sep 18, 2025 am 01:16 AM

Usethetitleattributeforsimpletooltipsorcssforcustom-styledones.1.addtitle = "text" toanyelementfordtooltips.2.ForStyledToolTips, wraptheelementInacontainer, use.tooltipand.tooltiptextclasseswithcspositioning, pseudo-elelights, et vissibilitycccc

Comment définir l'attribut Lang dans HTML Comment définir l'attribut Lang dans HTML Sep 21, 2025 am 02:34 AM

SetThelangAttributeInthehtmltagtospecifypagelanguage, par exemple, français; 2. usocodes comme "ES" ForSpanishor "FR" Forfrench;.

Capturez les événements de Mousedown avec l'élément parent contenant des iframes interdomains: principes et limitations Capturez les événements de Mousedown avec l'élément parent contenant des iframes interdomains: principes et limitations Sep 20, 2025 pm 11:00 PM

Cet article explore le défi de capturer des événements de Mousedown sur des divs parents contenant des iframes interdomains. Le problème de base est que les politiques de sécurité du navigateur (politique d'origine même) empêchent l'écoute d'événements DOM directe sur le contenu IFRAME inter-domaine. Ce type de capture d'événements ne peut pas être réalisé à moins que le nom de domaine source IFRAME soit contrôlé et que COR soit configuré. L'article expliquera ces mécanismes de sécurité en détail et leurs limites aux interactions des événements et fourniront des alternatives possibles.

JavaScript Fonction externe Call Difficulté Analyse: Emplacement du script et spécification de dénomination JavaScript Fonction externe Call Difficulté Analyse: Emplacement du script et spécification de dénomination Sep 20, 2025 pm 10:09 PM

Cet article explore deux problèmes courants lors de l'appel des fonctions JavaScript externes dans HTML: un temps de chargement de script incorrect ne fait pas partie des éléments DOM, et la dénomination des fonctions peut entrer en conflit avec les événements ou les mots clés intégrés du navigateur. L'article fournit des solutions détaillées, y compris les emplacements de référence de script de peaufinage et les spécifications de dénomination des bonnes fonctions pour s'assurer que le code JavaScript est correctement exécuté.

Quel est l'élément de figure et FigCaption dans HTML? Quel est l'élément de figure et FigCaption dans HTML? Sep 13, 2025 am 03:44 AM

ThefigureElementgroups self-conainedmedialikeImageSorCharts, tandis que la forme de la propriété de la capitalisation est en mesure d'improchera et de la création et de la création de la tension asshowninal.

See all articles