Ответы в темах

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Автор Bayrhake

    (@bayrhake)

    Как-то так:

    Спасибо больше, это помогло.

    Автор Bayrhake

    (@bayrhake)

    Возможно, удаляете фильтр ДО ТОГО, как он установлен.

    Я тоже так подумал и поэтому пробовал менять приоритеты, но толку нет. Приоритеты же для этого?

    Попробуйте повесить remove_filter на хук, срабатывающий позже, чем вызывается соотв. add_filter.

    Если приоритеты не для этого, то не подскажете как это сделать?

    Если я правильно понял, то этот фильтр устанавливается в includes/wc-core-functions.php

    • Ответ изменён 3 года назад пользователем Bayrhake.

    Стоило написать на форум и с передачей решил. Надо было объявить глобальными внутри функции шорткода $post_id и $arrayfun.

    function postshortcode($atts) {
      global $post_id;
      global $arrayfun;	
    
      ob_start();
      
      ?>
    <div class="postbar">
    	<?php  
    
    	$post_ids = explode(',', $atts['ids']);
    	
    	if (!$post_ids) echo "<b>Таких записей не нашлось</b><br>";
    
      foreach ( $post_ids as $post_id ) {
      $arrayfun = myfunction(); // моя функция в файле функций. Возвращает массив arrayfun(): [return $arrayfun;]
      get_template_part( 'template-parts/templpage'); // мой теплейт шаблона, использующий  массив данных из myfunction()
      }
    
    ?> 
    </div>
    <?php
      
      return ob_get_clean();	
      
    }
    
    add_shortcode( 'myshorcode', 'postshortcode' );
    

    Теперь вопрос о корректности данного кода.

    Во всех инструкциях в интернете весь результат шорткода возвращается через return. Напримр return "<div>результат</div>";
    Мне же надо поместить в div результат foreach, и уже я не очень понимаю такие вещи как буферизация.

    Я правильно состряпал такою конструкцию или надо как-то иначе?

    • Ответ изменён 4 года, 8 месяцев назад пользователем Bayrhake. Причина: иправление - return ob_get_clean();

    Спасибо, понял.

    По совету с другого ресурса использовать буферизацию и помощи Юрия в другом вопросе я составил такой код

    function postshortcode($atts) {
      ob_start();
      
      ?>
    <div class="postbar">
    	<?php  
    
    	$post_ids = explode(',', $atts['ids']);
    	
    	if (!$post_ids) echo "<b>Таких записей не нашлось</b><br>";
    
      foreach ( $post_ids as $post_id ) {
      $arrayfun = myfunction(); // моя функция в файле функций. Возвращает массив arrayfun(): [return $arrayfun;]
      get_template_part( 'template-parts/templpage'); // мой теплейт шаблона, использующий  массив данных из myfunction()
      }
    
    ?> 
    </div>
    <?php
      
      return ob_get_clean();	
      
    }
    
    add_shortcode( 'myshorcode', 'postshortcode' );

    Но моя функция не видит переданные ей ID.
    Пытался прописать global $arrayfun, но не получилось, куда бы его я его не вставлял.

    ЧЯДНТ? Куда надо прописать global и надо ли?

Просмотр 5 ответов — с 1 по 5 (всего 5)