Настройка функции Wordpress в файле темы function.php

Я пытаюсь создать приведенную ниже функцию в файле function.php моей темы и вызвать ее из файла taxonomy.php через

query_brands_geo('dealers', 'publish', '1', $taxtype, $geo, $brands);

все переменные устанавливаются в taxonomy.php.

Приведенный ниже запрос отлично работает, если я помещаю его прямо в свой файл taxonomy.php. Что мне не хватает, чтобы заставить эту работу работать как функция?

В качестве функции я получаю это сообщение об ошибке для аргумента, повторяемого для 2-6:

Предупреждение: отсутствует аргумент 2 для query_brands_geo ()

function query_brands_geo($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
    /* Custom Query for a brand/geo combination to display dealers with a certain brand and geography */
    //Query only for brands/geography combo and paid dealers

    $wp_query = new WP_Query();

     $args = array(
       'post_type' => '$posttype',
       'post_status' => array($poststatus),
       'orderby' => 'rand', 
       'posts_per_page' => 30,
       'meta_query' => array(
           array(
               'key' => 'wpcf-paid',
               'value' => array($paidvalue),
               'compare' => 'IN',
           )
       ),
        'tax_query' => array(
            'relation' => 'AND',
                array(
                    'taxonomy' => $taxtype,
                    'field' => 'slug',
                    'terms' => $geo
                ),
                array(
                    'taxonomy' => 'brands',
                    'field' => 'slug',
                    'terms' => $brands
                )

            )

        );
    $wp_query->query($args);

}
add_action( 'after_setup_theme', 'query_brands_geo' );

person user1609391    schedule 14.12.2012    source источник
comment
Что делать, если вы используете 'post_type' => $posttype,?   -  person brasofilo    schedule 15.12.2012
comment
Ах, я пропустил эти цитаты. Я внес изменения, но все еще не получил результат запроса. Есть ли другие идеи о том, почему запрос может не выполняться? Возможно, мне нужно переместить $ wp_query обратно в мой файл taxonomy.php. Есть ли способ вернуть $ args? Может, вернуть $ args? Я не уверен.   -  person user1609391    schedule 15.12.2012


Ответы (4)


Хорошо, я тестировал, и он работает так: Исправьте код вашей функции следующим образом:

function query_brands_geo($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
/* Custom Query for a brand/geo combination to display dealers with a certain brand and geography */
//Query only for brands/geography combo and paid dealers

 $args = array(
   'post_type' => '$posttype',
   'post_status' => array($poststatus),
   'orderby' => 'rand', 
   'posts_per_page' => 30,
   'meta_query' => array(
       array(
           'key' => 'wpcf-paid',
           'value' => array($paidvalue),
           'compare' => 'IN',
       )
   ),
    'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => $taxtype,
                'field' => 'slug',
                'terms' => $geo
            ),
            array(
                'taxonomy' => 'brands',
                'field' => 'slug',
                'terms' => $brands
            )

        )

    );
query_posts($args);

}

Затем в taxonomy.php сделайте следующее:

query_brands_geo('post', 'published', ..., ..., ...);
while ( have_posts() ) : the_post(); 

the_content(); // Etc.

endwhile; // end of the loop.
person barakadam    schedule 17.12.2012

Вы говорите, что хотите использовать эту функцию, которую вы помещаете в functions.php и запускаете в вашем файле taxonomy.php. Верно, но опубликованный вами код показывает, что вы выполняете его как действие (за кодом функции следует: add_action(...). Итак, что вы там сделали, так это то, что вы подключили свою функцию к ловушке after_setup_theme. Таким образом, функция не выполняется вызовом, который вы (я полагаю) поместили в taxonomy.php, она фактически автоматически выполняется WP после установки темы, когда do_action('after_setup_theme'...) выполняется WordPress! И в этом контексте передается только один аргумент, поэтому вы получаете сообщение об ошибке: аргумент 2 отсутствует ... Так что выньте строку add_action(...), сохраните свою функцию в functions.php и просто вызовите это в taxonomy.php. Он должен работать.

person barakadam    schedule 14.12.2012
comment
Большое спасибо, что решили сообщение об ошибке. Однако я не вижу результатов фильтра по моему запросу, когда просматриваю страницу taxonomy.php в браузере. Есть ли что-то, что мне нужно вернуть из этой функции, чтобы запрос действительно выполнялся на странице taxonomy.php? - person user1609391; 15.12.2012

Вам нужно что-то вернуть из вашей функции, поэтому измените это в конце кода функции:

$wp_query->query($args);

с этим :

$result = $wp_query->query($args);
wp_reset_query();
return $result;

И назовите его соответствующим образом в taxonomy.php, зная, что объект результата функции при вызове следующим образом:

$myquery = query_brands_geo($arg1, $arg2, ...); // Etc.

Будет объектом результата запроса, поэтому вам нужно пройти через него и т. Д. (См. Код WordPress в другом месте с циклами).

person barakadam    schedule 15.12.2012
comment
Еще раз спасибо. Я все еще не получаю результаты отфильтрованного запроса. Этот запрос работает, если помещен в php-файл таксономии, но, конечно, я хочу, чтобы это была функция. Я изменил свою функцию в соответствии с указанным выше возвратом результатов $. В моем php-файле таксономии у меня есть следующее: $myquery=query_brands_geo('dealers', 'publish', '1', $taxtype, $geo, $brands); После этого у меня есть цикл <?php if (have_posts()) : ?><?php while (have_posts()) : the_post(); ?>. Я даже пробовал <?php if (have_posts()) : ?><?php while ($myquery->have_posts()) : $myquery->the_post(); ?> Мне что-то еще не хватает? - person user1609391; 17.12.2012
comment
Когда я использую <?php if (have_posts()) : ?><?php while ($myquery->have_posts()) : $myquery->the_post(); ?>, я получаю эту ошибку: Неустранимая ошибка: вызов функции-члена have_posts () для не-объекта в /home3/answerun/public_html/wp-content/themes/tipztheme/taxonomy.php в строке 99 - person user1609391; 17.12.2012

Я только что протестировал это на сайте WP, и он работает так же, как и у вас, если вы уважаете ту же логику:

            function query_brands_geo($posttype, $poststatus) {
              $args = array(
               'post_type' => $posttype,
               'post_status' => array($poststatus) 
                );
                $result = new WP_Query($args);
                wp_reset_query();
                return $result;
            }

            $result = query_brands_geo('post', 'published');
            while ( $result->have_posts() ) : $result->the_post(); 
                the_content();
            endwhile; // end of the loop. 
person barakadam    schedule 18.12.2012