ACF – příspěvky s datem starším než dnešní datum

Úvodní stránka Fórum podpory WordPressu Pluginy (funkčnost webu) ACF – příspěvky s datem starším než dnešní datum

Zvolené téma obsahuje celkem 7 odpovědí. Do diskuze (2 účastníci) se naposledy zapojil uživatel  admin a poslední změna je stará 8 let, 1 měsíc.

Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)
  • Autor
    Příspěvky
  • #26720

    jjp
    Participant

    Dobrý den,
    snažím se na homepage vypsat akce a potřebuji zajistit to, aby se vypisovaly pouze budoucí akce, takže né akce s datem starším, než je dnešní datum.

    Datum konání zadávám do pole vytvořené pomocí Advanced Custom Field s názvem “datum”.

    Na homepage mám tento kód:

    <div class="row">
      <?php
      $the_query = new WP_Query( array(
        'post_type' => 'akce',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'meta_key' => 'datum',
        'posts_per_page' => 1,
      ) );
    
      while ( $the_query->have_posts()) :
        $the_query->the_post();          
        # get the datum for this post
        $temp_date = get_field('datum', get_the_ID() );        	
                    
        if ($temp_date > date("ymd")) {
          ?>
          <div class="akce">
            <!-- Obsah jedné akce -->
          </div>
                
        <?php } endwhile; wp_reset_query(); ?>
    </div>

    Je tam WP_Query(), filtrující pouze custom post “Akce” a řadící akce podle “datum”. Pořád mi tam ale nějak nefunguje ta podmínka pro starší akce, než dnešní datum. Vždy se vypíše starší akce, bez ohledu na tu podmínku.

    Zkoušel jsem všechno možné, ale už mě nenapadá, jak to řešit.

    Budu rád za každou pomoc, jelikož to celkem spěchá a jsem už v koncích :)

    Děkuji předem

    #26722

    admin
    Keymaster
    Web

    Nepomohlo by toto starší téma, kde jsme řešili právě formát data?

    A podmínka by pak mohla být přímo v rámci WP_Query() za použití parametrů meta_key, meta_value a meta_compare.

    #26725

    jjp
    Participant

    To jsem také zkoušel. Pokud vás chápu, tak takto:

    <div class="row">
      <?php
      $the_query = new WP_Query( array(
        'post_type' => 'akce',
        'order' => 'ASC',
        'orderby' => 'meta_value',
        'meta_key' => 'datum',
        'posts_per_page' => 1, 
        'meta_query' => array(
          array(
            'meta_value' => date('ymd', strtotime("today") ),
            'meta_key' => 'datum',
            'meta_compare' => '>=',
          ),
        ),
      ) );
    
      while ( $the_query->have_posts()) :
        $the_query->the_post();
        ?>			
        <div class="akce-hp">
          <!-- Obsah jedné akce -->
        </div>
    
        <?php 
      endwhile; 
      wp_reset_query();
      ?>
    </div>

    Ale i tak to z nějakého důvodu stále nefunguje jak má :(

    #26726

    admin
    Keymaster
    Web

    Máte tam dvakrát: 'meta_key' => 'datum', ale to by asi nemělo vadit.

    V jaké podobě (formát) je ukládán datum v poli datum? Když používáte date('ymd'), tak by měl mít stejnou podobu?

    #26727

    jjp
    Participant

    Ve formátu yymmdd, což by mělo být asi to stejné jako date(‘ymd’) v php. Pokud jsem to podle specifikace správně pochopil.

    Z ACF mám ve function.php toto…

    
    if(function_exists("register_field_group"))
    {
    	register_field_group(array (
    		'id' => 'acf_akce',
    		'title' => 'Akce',
    		'fields' => array (
    			array (
    				'key' => 'field_569cf1f7397f5',
    				'label' => 'Datum',
    				'name' => 'datum',
    				'type' => 'date_picker',
    				'required' => 1,
    				'date_format' => 'yymmdd',
    				'display_format' => 'dd/mm/yy',
    				'first_day' => 1,
    			),
    		),
    		'location' => array (
    			array (
    				array (
    					'param' => 'post_type',
    					'operator' => '==',
    					'value' => 'akce',
    					'order_no' => 0,
    					'group_no' => 0,
    				),
    			),
    		),
    		'options' => array (
    			'position' => 'side',
    			'layout' => 'default',
    			'hide_on_screen' => array (
    			),
    		),
    		'menu_order' => 0,
    	));
    }
    
    #26729

    admin
    Keymaster
    Web

    A co se ve výsledku zobrazuje? Je výpis nějak ovlivněn nebo seřazen?

    Podívejte se prosím ještě do databáze do tabulky wp_postmeta, zda název pole datum nedědí třeba nějaký prefix a jak se datum opravdu ukládá.

    #26731

    jjp
    Participant

    Aháá, tak tady to je. V databází je meta_value 20160319. Takže pomohlo nastavit date(‘Ymd’).

    Takže ACF s tím formátem pracuje trošku jinak, než jsem předpokládal dle zápisu yymmdd.

    Teď by to snad mělo fungovat bez problému. Mockrát děkuji za pomoc.

    
                <div class="row">
                  <?php
                    $the_query = new WP_Query( array(
                  	'post_type' => 'akce',
                  	'order' => 'ASC',
                  	'orderby' => 'meta_value',
                  	'meta_key' => 'datum',
                    'posts_per_page' => 1, 
                    'meta_value'   => date('Ymd'),
                    'meta_key'     => 'datum',
                    'meta_compare' => '>=',
    
                  	) );
                
                  	while ( $the_query->have_posts()) :
                  	$the_query->the_post();
                  
                  ?>	
                  <div class="akce-hp">
                     <!-- Obsah jedné akce -->
                  </div>
                
                	<?php 
                   endwhile; 
                   wp_reset_query();
                  ?>
                  
                </div>
    
    
    #26735

    admin
    Keymaster
    Web

    Perfektní, jsem se rád, že se to podařilo dořešit :-)

Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.

WordPress – novinky, návody a zajímavosti