Wsparcie » Motywy » Dodanie kodu pod postem – nie w single.php tylko w functions.php

  • Witam,

    nie mogę sobie poradzić z zakodowaniem zawartości, która ma się pojawiać pod każdym postem.

    Wiem, że powinienem to zrobić za pomocą czegoś takiego:

    function my_content_filter($content){
      //only add text before WordPress posts
      if(is_single() && is_main_query()){
        $before = '<p>This content will go before WordPress posts</p>';
        $after = '<p>This content will go after WordPress posts</p>';
    
        //modify the incoming content
        $content = $before . $content . $after;
      }
      return $content;
    }
    add_filter( 'the_content', 'my_content_filter' );

    Tylko mój problem jest taki, że nie chcę dodać treści pod postem, tylko kod php. Taki:

    $var1 = get_post_meta($post->ID, 'var1', true);
    $var2 = get_post_meta($post->ID, 'var2', true);
    if ($var1 && !$var2) {
    include('dane/pokaz-zdjecie.php');
    }

    Pomoże ktoś?

Viewing 5 replies - 1 through 5 (of 5 total)
  • zamiast include daj print_r(’test') jeżeli się wyświetla to znaczy że skrypt dochodzi to tego miejsca. Bo mam wrażenie problemem jest include bo to powinno się zrobić
    include get_template_directory() . 'subdir/filename.php';

    Dzięki za odpowiedź. To ogarnę, jakoś znajdę ścieżkę.

    Ale nie wiem jak ten kod dołożyć do funkcji, która wyświetli mi tego include pod postem.

    Czyli wiem jak dodać tekst do $after ale nie mam pojęcia jak dodać kod, żeby zadziałał po $content.

    Kurde sory, nie ogarnąłem chyba do konca

    Nie wiem co masz w pokaz-zdjecie.php ale jak tam masz np:
    $dane = 'costam';

    i jak includujesz to od razu możesz dodać $dane do contentu
    $content = $content . $dane;

    function my_content_filter($content){
      //only add text before WordPress posts
      if(is_single() && is_main_query()){ 
    
        
        include('dane/pokaz-zdjecie.php'); // i tam jest jakiś kod i ma zmienną $dane
    
        //modify the incoming content
        $content =  $content . $dane;
      }
      return $content;
    }
    add_filter( 'the_content', 'my_content_filter' );

    Możesz też zamiast robić include to zrobić cos takiego

    function myFunctionPokazZdjecie(){
    	
    	$dane = 'costam';
    
    	return $dane;
    }

    i potem zamiast include to odpalić tą funkcję

    daj znać czy działa i jest ok, mam nadzieje ze nic nie pomyliłem.

    W pliku includowanym mam po prostu wyświetlaną tabelę HTML z różnymi zmiennymi. Np. tytuł posta, iteracje, zdjęcia.

    Dziękuję Ci bardzo za odpowiedź, bo popchnęła mnie dalej i znalazłem takie rozwiązanie jak poniżej. Nie wiem czy jest optymalne pod względem kodowania, bo nie jestem programistą 🙂 Daj znać co myślisz.

    function my_content_filter($content){
      //only add text before WordPress posts
      if(is_single() && is_main_query()){
      global $post;
      $var1 = get_post_meta($post->ID, 'var1', true);
      $var2 = get_post_meta($post->ID, 'var2', true);
    
    	if ($var1 && !$var2) {
    	ob_start();
    	include('dane/pokaz-zdjecie.php');
    	$after = ob_get_clean();
    	}
    
        //modify the incoming content
        $content = $content . $after;
      }
      return $content;
    }
    add_filter( 'the_content', 'my_content_filter' );

    Hmm. Jeżeli działa to generalnie jest ok. To to zawsze jakiś plus. Myślę tylko że nie powinieneś używać ob_start(). Czy bez tego coś się chrzani lub nie działa? A jak includjesz to tak jakby miał ten kod w tamtym miejscu wiec możesz się posłużyć zmienną z tego includa, więć $after może być = jakiejś tam zmiennej z includa.

Viewing 5 replies - 1 through 5 (of 5 total)