वर्डप्रेस फंक्शन = 0

मैं PHP कोडिंग के साथ एक पूर्ण नोब हूं और मुझे लगता है कि कई हंसी के बाद, समाधान एक पेशेवर के लिए वास्तव में सरल है। मैंने अपने wp-template के category.php के लिए एक साधारण औसत-गणना को कोड किया और यह पूरी तरह से काम करता है लेकिन मैंने सुना है कि यह डिज़ाइन और फ़ंक्शन को विभाजित करने का एक बेहतर तरीका है और इसलिए मैंने इसे टेम्पलेट फ़ंक्शन में कॉन्फ़िगर करने का प्रयास किया:

<?php

$total = 0;
$count = 0;

foreach($posts as $post)
{
     if(get_field('weight')){//If we have a value add it to the total and count it
        $total += get_field('weight');
        $count++;
     }
}

$Average = $total/$count; 
echo $Average;       
?>

परिणाम हमेशा "0" होता है क्योंकि मुझे लगता है कि वह ऊपर से चर खींचता है और foreach-process को छोड़ देता है। पर क्यों?

function averageit()
{
$total = 0;
$count = 0;
foreach($posts as $post)
    if(get_field('weight'))
    $total += get_field('weight');
    $count++;
    $Average = $total/$count;

  echo $Average; 
}

मुझे उम्मीद है कि कोई मेरी मदद कर सकता है। आपका अग्रिम में ही बहुत धन्यवाद!

0
यह एक चरणीय दायरा मुद्दा है - आपके फ़ंक्शन के अंदर, $ posts एक स्थानीय वैरिएबल का जिक्र कर रहा है, जिसे आप चाहते हैं। मुझे लगता है कि आपको बस कार्य करने की शुरुआत में वैश्विक $ पोस्ट शामिल करना है, और यह आपके फ़ंक्शन को सही चर का उपयोग करने देगा।
जोड़ा लेखक andrewsi, स्रोत

2 उत्तर

यहां खेलने पर कुछ मुद्दे हैं। मुख्य बात यह है कि फ़ंक्शन में $ पोस्ट परिभाषित नहीं हैं। त्रुटि जांच चालू करने से इन मुद्दों पर ध्यान देने में मदद मिलेगी। फ़ंक्शन में पोस्ट जोड़ने का प्रयास करें:

function averageit($posts){

पठनीयता के लिए मैं बयानों और लूप के बाद हमेशा ब्रेसिज़ का उपयोग करना पसंद करता हूं। आपके मामले में यह एक मुद्दा होगा।

इस:

if(get_field('weight'))
    $total += get_field('weight');
    $count++;
    $Average = $total/$count;

के बराबर है:

if(get_field('weight')){
    $total += get_field('weight');
}
$count++;
$Average = $total/$count;

इसी तरह आपका लूप अगर केवल पहले लूपिंग करता है। पुनर्संरचना और ब्रेसिज़ जोड़ने का प्रयास करें:

function averageit($posts){
    $total = 0;
    $count = 0;
    foreach($posts as $post){
        if(get_field('weight')){
            $total += get_field('weight');
            $count++;
        }
    }
    $Average = $total/$count;
    echo $Average; 
}
0
जोड़ा
बस मुझे कहना है - आपको बहुत धन्यवाद, आपके लिए धैर्य! यह काम करता हैं! नीचे भी एक! समुदाय के लिए बड़ा धन्यवाद!
जोड़ा लेखक user3049948, स्रोत
हो सकता है कि आपके पास थोड़ी देर के लिए कुछ सलाह न हो :-( - शायद आपको पता है कि यह फ़ंक्शन-कॉल मेरे टेम्पलेट के एकल.एफ़.पी. में क्यों काम नहीं करता है? वही त्रुटि फिर से हैलो कहती है :-( अग्रिम में आपका बहुत बहुत धन्यवाद ।
जोड़ा लेखक user3049948, स्रोत
हैलो जिम, नया सवाल यहां है। [लिंक] PHP में कस्टम फ़ील्ड% 5b से सही मान नहीं मिलता है "> stackoverflow.com/questions/20571579/… - धन्यवाद!
जोड़ा लेखक user3049948, स्रोत
@ user3049948 कोई समस्या नहीं है। मैं खुशी से मदद कर सकता है।
जोड़ा लेखक Jim, स्रोत
@ user3049948 संभवतः एक नया प्रश्न पूछने लायक है। मैं कोड का पालन करता हूं और सुनिश्चित करता हूं कि $ posts निश्चित रूप से उपलब्ध है।
जोड़ा लेखक Jim, स्रोत

आपकी समस्या परिवर्तनीय स्कोप में से एक होने की संभावना है। एक चर का "दायरा" कोड का वह भाग है जहां वह चर "अस्तित्व" है, यदि आप करेंगे।

अपने मामले में, '$ पोस्ट' चर में आइटम के माध्यम से लूपिंग, अपने foreach पाश पर विचार करें। $ पोस्ट वैरिएबल घोषित कहां है? मुझे संदेह है कि फ़ंक्शन चलने के बिंदु पर, वह चर मौजूद नहीं है, इसलिए लूप को निष्पादित नहीं किया जा रहा है।

मैं आपके फ़ंक्शन में निम्नलिखित संशोधन सुझाता हूं:

function find_average_weight($posts)
{
    $total = 0;
    $count = 0;
    foreach($posts as $post)
    {
        if(get_field('weight'))
        {
            $total += get_field('weight');
            $count++;
        }
    }
    $Average = $total/$count;
    return $Average; 
}

यहां कुछ बदलाव हैं।

  • फ़ंक्शन को लिखते समय मुझे एहसास हुआ कि आपके foreach लूप में कोई ब्रेसिज़ नहीं था। इससे पठनीयता के मुद्दे पैदा हो सकते हैं और वास्तव में तर्क का काम गलत तरीके से कर सकते हैं, इसलिए मैंने उन्हें इसमें रखा:)
  • मैंने आवश्यक "$ पोस्ट" चर को पास करने के लिए फ़ंक्शन में पैरामीटर जोड़ा।
  • मैंने फ़ंक्शन नाम को थोड़ा और वर्णनात्मक रूप में बदल दिया है, हालांकि सटीक एप्लिकेशन को नहीं जानते कि मैं यहां चिह्न से बाहर हो सकता हूं, इसलिए नमक के अनाज के साथ सुझाव लें।
  • मैंने आपके फ़ंक्शन को एक मान वापस करने के लिए बदल दिया है, जिसे आप तब भी कर सकते हैं जो आप चाहते हैं। यह आपके इरादे के बारे में थोड़ा और अज्ञेयवादी कार्य करता है - शायद किसी बिंदु पर आप परिणामों को आउटपुट किए बिना इन पदों का औसत खोजना चाहेंगे?

echo(find_average_weight($posts));
0
जोड़ा
बस मुझे कहना है - आपको बहुत धन्यवाद, आपके लिए धैर्य! यह काम करता हैं! इसके अलावा एक भी! समुदाय के लिए बड़ा धन्यवाद!
जोड़ा लेखक user3049948, स्रोत
हो सकता है कि आपके पास थोड़ी देर के लिए कुछ सलाह न हो :-( - शायद आपको पता है कि यह फ़ंक्शन-कॉल इको क्यों है (find_average_weight ($ पोस्ट)); मेरे टेम्पलेट के एकल.एफ़.पी. में काम नहीं करता है? वही त्रुटि फिर से हैलो :-(
जोड़ा लेखक user3049948, स्रोत
हैलो हेक्सा, नया सवाल यहां बनाया गया था। [लिंक] PHP में कस्टम फ़ील्ड% 5b से सही मान नहीं मिलता है "> stackoverflow.com/questions/20571579/… - धन्यवाद!
जोड़ा लेखक user3049948, स्रोत
@ उपयोगकर्ता 3049 9 48 - आपका स्वागत है। आपकी साइट के साथ शुभकामनाएँ :)
जोड़ा लेखक Hecksa, स्रोत
अपना कोड अधिक पूरी तरह से देखे बिना, मैं वास्तव में यह नहीं कह सकता कि त्रुटि क्या हो रही है। मैं आपको अपनी समस्या का समाधान करने के लिए एक नया प्रश्न बनाने की सलाह दूंगा।
जोड़ा लेखक Hecksa, स्रोत