Support » Kokeneille käyttäjille » Artikkeleiden tietyn meta kentän summaus

  • Moi

    Jonkun ohjeen mukaan koitin viritellä oman shortcode, joka näyttäisi kaikista artikkeleista tietyn meta kentän summan.

    Ao. koodi aiheuttaa sen, että sivu tulostuu otsikkoon asti, mutta itse sisältö jää puuttumaan.
    Johonkin se siis kaatuu, muttei kaada koko saittia (WP-ominaisuus?)

    Koodi on lisätty teeman functions.php tiedostoon.

    function total_savings() {
    $args = array(
        'meta_key' => 'diy_savings'
    );
     
    // Custom query.
    $query = new WP_Query( $args );
    $sum = 0; 
    $metaField = 'diy_savings';
    // Check that we have query results.
    if ( $query->have_posts() ) {
     
        // Start looping over the query results.
        while ( $query->have_posts() ) {
     
            $query->the_post();
     	$sum = $sum + get_post_meta( get_the_ID(), $metaField );
            // Contents of the queried post results go here.
     
        }
     
    }
     
    // Restore original post data.
    wp_reset_postdata();
    
    return $sum;
    }
    add_shortcode( 'total_savings', 'total_savings' );
     
    • Tätä aihetta muokkasi 2 vuotta, 6 kuukautta sitten  lifespan.
    • Tätä aihetta muokkasi 2 vuotta, 6 kuukautta sitten  lifespan.
Esillä 4 vastausta, 1 - 4 (kaikkiaan 4)
  • get_post_meta() ei palauta oletuksena metakentän arvoa suoraan, vaan taulukon, jossa on kaikki artikkelin samannimiset metakentät (vaikka niitä olisi yksi). Siksi summaaminen ei onnistu, vaan tulee fatal error. Pitää olla näin:

    $sum = $sum + get_post_meta( get_the_ID(), $metaField, true );

    Sittenkin voi tulla ongelmia, jos metakentässä on jostain syystä jotain, jota ei saa tulkittua numeroksi, joten varovainen tekisi vaikkapa näin:

    $post_savings = get_post_meta( get_the_ID(), $metaField, true );
    if (is_numeric($post_savings)) $sum = $sum + $post_savings;

    Moi

    Kiitos selvennyksestä. Eilen kerkesin väsäilemään uuden skriptin, joka palauttaa summan:

    $args = array(
        'numberposts' => -1,  // all the posts
        'post_type'   => 'post'
    );
    $posts = get_posts( $args );
    
    $total = 0;
    foreach( $posts as $current_post) {
        $single = get_post_meta( $current_post->ID, 'diy_savings', true );
        $total += $single;
    }
    
    return $total;

    Menee kyllä ainakin näin alussa sekaisin post,article,page,custom page jne nimitykset.

    • Tätä vastausta muokkasi 2 vuotta, 6 kuukautta sitten  lifespan.

    Tuohonkin suosittelen tarkistusta, että diy_savings on numero, muuten voi tulla yllätyksiä. Vai onko tietoa syöttäessä tarkistettu, että data voi olla vain numeroita? Koskaan ei kannata aliarvioida käyttäjien törppöyttä tiedontallennuksessa…

    Toistaiseksi teen vain itselle, joten vastaavaa ongelmaa ei ole.

    Jos tekisin ulkopuoliselle, niin silloin tarttis jo validointia ihan clientiin tuon lisäksi.

Esillä 4 vastausta, 1 - 4 (kaikkiaan 4)
  • The topic ‘Artikkeleiden tietyn meta kentän summaus’ is closed to new replies.