• Rozwiązano byker

    (@byker)


    Witam,
    Chciałbym stworzyć shortcode który umożliwi wstawienie postów z wybranej kategorii do strony statycznej (pomiędzy treścią strony).
    Mam taki kod:

    function category_shortcode( $atts )
    {
    extract(shortcode_atts(array(
           'category' => '',
    	), $atts));
    	//The Query
    	query_posts('category=' . $id .);
    	//The Loop
    	if ( have_posts() ) : while ( have_posts() ) : the_post();?>
    	<div id="wpis_do_pobrania_tytul">
    	<h3><a href="<?php the_field('plik'); ?>"><?php the_title();   ?></a></h3>
    </div>;
    	<?php endwhile; else:
    	endif;
    
    	//Reset Query
    	wp_reset_query();
    }
    add_shortcode('category', 'category_shortcode');

    Niestety coś nie działa i nie mam pojęcia co to może być. Chciałbym też, aby zamiast id kategorii, wpisywać jej nazwę. Czy możecie podpowiedzieć co poprawić? Pozdrawiam

Viewing 10 replies - 1 through 10 (of 10 total)
  • Użycie query_posts wewnątrz query_posts to kiepski pomysł. W funkcji shortcode’a użyja raczej nowej instancji obiektu WP_Query.

    referencje:
    http://codex.wordpress.org/Class_Reference/WP_Query

    Thread Starter byker

    (@byker)

    Dzięki za podpowiedź, zmieniłem na wp_query, ale nie działa. Co to może być?

    <?php
    function category_shortcode( $atts )
    {
    	extract(shortcode_atts(array(
    		"cat" => 'certyfikaty',
    	), $atts));
    
    	$the_query = new WP_Query(array( 'category_name' => '$cat', 'post_type' => 'any' ));
    	//The Loop
    	while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    	<div id="wpis_do_pobrania_tytul">
    	<h3><a href=<?php the_field('plik'); ?>><?php the_title(); ?></a></h3>
    </div>;
    	<?php endwhile;
    	//Reset Query
    	wp_reset_query();
    }
    add_shortcode('category', 'category_shortcode');
    ?>

    $the_query = new WP_Query(array( 'category_name' => '$cat', 'post_type' => 'any' ));

    czy masz kategorię o nazwie „$cat”? jak chcesz tą z argumentu to zmień na:

    $the_query = new WP_Query(array( 'category_name' => $cat, 'post_type' => 'any' ));
    Thread Starter byker

    (@byker)

    Dziękuję, teraz się wyświetla! Mam jeszcze problem: co wstawić do kodu, żeby wyświetlał treść w miejscu gdzie jest wstawiony shortcode? Teraz ładuje wszystko na początku strony.

    Teraz ładuje wszystko na początku strony.

    Dzieje się tak, dlatego, że Twój kod jest produkowany „od razu” zamiast być zwrócony.

    Tutaj foo będzie na początku wpisu:

    function category_shortcode()
    {
        echo 'foo';
    }

    A tutaj foo będzie tam gdzie jest wstawiony shortcode

    function category_shortcode()
    {
        return 'foo';
    }

    Thread Starter byker

    (@byker)

    Zrobiłem tak, ale brak rezultatu. Czy ta metoda jest dobra?

    <?php
    function category_shortcode( $atts )
    {
    
    	extract(shortcode_atts(array(
    		"cat" => 'certyfikaty',
    	), $atts));
    		$the_query = new WP_Query(array( 'category_name' => $cat, 'post_type' => 'any' ));
    	//The Loop
    	while ( $the_query->have_posts() ) : $the_query->the_post();
    	$wpis='<div id="wpis_do_pobrania_tytul">
    	<a href= "'.the_field('plik').'">'.the_title().'</a>
    </div>';
    	endwhile;
    	//Reset Query
    	wp_reset_postdata();
    	return $wpis;
    }
    add_shortcode('category', 'category_shortcode');
    ?>

    Zrobiłem tak, ale brak rezultatu. Czy ta metoda jest dobra?

    Poza kilkoma błędami, jest dobra. Teraz nic się nie powinno wyświetlać. Tak?

    Popraw:

    $wpis = '';
    //The Loop
    while ( $the_query->have_posts() ) : $the_query->the_post();
        $wpis .= '<div id="wpis_do_pobrania_tytul">
    	<a href= "'.the_field('plik').'">'.the_title().'</a>
    </div>';
    endwhile;

    Thread Starter byker

    (@byker)

    Efekt jest dla mnie nielogiczny: funkcje '.the_field ('plik').' i’.the_title().’` wyświetla przed zawartością strony, a resztę w miejscu gdzie wstawiony jest shortcode. Czy te funkcje trzeba jakoś inaczej zdefiniować?

    aaahrhtae!

    Niezauważyłem.

    Zamień the_title na get_the_title żeby nie „pisać” tylko „zwracać”.

    TO samo trzeba zrobić w tej drugiej, które nie jest funkcją WordPressa.

    Thread Starter byker

    (@byker)

    Super, bardzo mi pomogłeś. Dzięki.
    aa, może komuś się przyda: funkcja wtyczki ACF- the_field()- może być użyta w tym przypadku jako get_field().

Viewing 10 replies - 1 through 10 (of 10 total)
  • Temat ‘shortcode’ jest zamknięty na nowe odpowiedzi.