0

I a problem with getting the query for custom taxonomy to work in this function. The $filter is filled with data but the get_posts() does not use it? The query works without the tax_query and there are: custom posts with the correct taxonomy(list)... want am I missing?

add_action( 'restrict_manage_posts', 'add_export_button' );
function add_export_button() {
    $screen = get_current_screen();

if (isset($screen->parent_file) && ('edit.php?post_type=certificate'==$screen->parent_file)) {
        ?>
        <input type="submit" name="export_all_posts" id="export_all_posts" class="button button-primary" value="Export All Posts">
        <script type="text/javascript">
            jQuery(function($) {
                $('#export_all_posts').insertAfter('#post-query-submit');
            });
        </script>
        <?php
    }
}

add_action( 'init', 'func_export_all_posts' );
function func_export_all_posts() {
    if(isset($_GET['export_all_posts'])) {
        if(isset($_GET['list'])) {
            $filter =  strval($_GET['list']);
        };
        $arg = array(
                'post_type' => 'certificate',
                'post_status' => 'publish',
                'posts_per_page' => -1,
                'tax_query' => array(
                    array(
                        'taxonomy' => 'list',
                        'field'    => 'slug',
                        'terms'    => $filter ,
                    )
                    ),
            );

        global $post;
        $arr_post = get_posts($arg);

        if ($arr_post) {

        header('Content-type: text/csv');
        header('Content-Disposition: attachment; filename="wp.csv"');
        header('Pragma: no-cache');
        header('Expires: 0');

        $file = fopen('php://output', 'w');

        fputcsv($file, array('Post Title', 'URL'));

            foreach ($arr_post as $post) {
                setup_postdata($post);
                fputcsv($file, array(get_the_title(), get_the_permalink()));
            }

            exit();
        }
    }
}
  • Not sure it would affect anything, but don't think you need that global $post in there as you're querying the posts to the $arr_post array – Tim Hallman Dec 9 '18 at 19:26
  • Other than that, perhaps try adding 'operator' => 'IN' to your tax_query array. – Tim Hallman Dec 9 '18 at 19:27
  • Actually, wrap your 'terms' in an array, like this 'terms' => array($filters). I believe that is your problem. – Tim Hallman Dec 9 '18 at 19:30
  • Thank you very much for your reply, Tim. I have now tried: 'operator' => 'IN' and to place the terms in an array and the drop the "global $post". But nothing seems to work when making the query for custom taxonomy. – Jesper Kahr Nielsen Dec 10 '18 at 9:50
0

I'm fairly sure you just need to pass an array for terms like this:

$arg = array(
     'post_type' => 'certificate',
     'post_status' => 'publish',
     'posts_per_page' => -1,
     'tax_query' => array(
          array(
               'taxonomy' => 'list',
               'field'    => 'slug',
               'terms'    => array($filter)
           )
      ),
);
0

The problem was that I used the toolset plugin to generate the taxonomy which caused some priority confusion. Adding this to my functions.php solved the problem:

remove_action('init', 'func_export_all_posts');
add_action('init', 'func_export_all_posts', 99);

Ref: https://toolset.com/forums/topic/wp_query-does-not-work-with-taxonomy-at-the-backend

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.