sergiosoares
  • 0
Новичок

Всегда использовать один и тот же МАССИВ в разных запросах

  • 0

У меня есть функция, которая возвращает идентификаторы сообщений массива os.

На данный момент, каждый раз, когда у меня есть запрос, я должен сделать это:

$ids = повестка дня();

query_posts(массив(‘post__not_in’ => $ids);

Есть ли способ поддерживать массив, вызывая его в header.php и используя этот массив каждый раз, когда вы выполняете query_posts?

Я думаю, что на моем пути это перегрузка запросов.

Спасибо m8s Извините за мой плохой английский

http://www.zarpa.eu

Share
  1. Мне не нравится использовать для этого категории, поскольку они должны быть семантическими терминами. Однако мне нравится идея глобального массива. Вместо того, чтобы создавать новый запрос напрямую, я буду фильтровать его через функцию, которая добавит результаты в глобальный массив и вернет результаты:

    Я добавляю это в functions.php:

    function nt_globals($args){
        global $used;
    
        $defaults = array(
            'post__not_in' => $used,
            );
        $query = wp_parse_args( $args, $defaults );
    
        $queryObject = new WP_Query($query);
    
        foreach ($queryObject->posts as $item):
            $used[] = $item->ID;
        endforeach;
    
        return $queryObject;
    }
    

    Затем я вызываю функцию всякий раз, когда мне нужен запрос:

    $queryObject = nt_globals('posts_per_page=1');
    
    while ($queryObject->have_posts()):
        $queryObject->the_post();
        the_title();
    endwhile; 
    
    • 0
  2. На самом деле я бы рекомендовал другой подход:

    Создайте специальную категорию для этого набора сообщений (например: «Не в цикле»). Затем, когда вы звоните query_posts(), вы можете исключить публикации на основе этой категории.

    Однако, если вы хотите придерживаться своей исходной функциональности… добавьте функцию, wp_head которая устанавливает ваш массив идентификаторов, а затем ссылайтесь на нее как на глобальную переменную всякий раз, когда вы вызываете query_posts() :

    function ignore_ids() {
        $ignore_ids = agendados();
    }
    add_action('wp_head', 'ignore_ids');
    

    Затем используйте:

    global $ignore_ids;
    query_posts( array('post__not_in' => $ignore_ids) );
    
    • 0
  3. я делаю что-то не так

    вот код:

    функция повестки дня() {

    global $wpdb;
    $ids = array();
    $todaysDate = date('Y-m-d H:i:s');
    $hoje = strtotime($todaysDate);
    
    $query = "SELECT post_date, ID from $wpdb->posts WHERE post_status='publish'";
    $posts = $wpdb->get_results($query);
    
    if ($posts):
        foreach ($posts as $post) {
            $data_post = $post->post_date;
            $str = strtotime($data_post);
            if ($str < $hoje) {
                $ids[] = $post->ID;
            }
        }
    endif;
    return $ids;
    

    }
    add_action(‘wp_head’, ‘повестки дня’);

    тогда:

    глобальные идентификаторы $;

    $args = array (
    'post__not_in' => $ids,
    'showposts' => 30,
    'order' => ASC,
    );
    global $post;
    $posts = get_posts($args);
    if ($posts) {
        foreach ($posts as $post) {
            setup_postdata($post);
            $data = get_the_date('Y-m-d');
                echo $data;echo '<br/>';
            }       
    }
    

    массив $ids ничего не содержал:/

    • 0

Оставить ответ

You must login to add an answer.