I’m trying to create a shortcode base on the following code:

<ul class="filter">
<li>Filter:</li>
<li class="link-store"><a href="https://wordpress.stackexchange.com/questions/47062/<?php echo get_permalink( 23 ); ?>">All</a></li>
    <?php global $post; $thispage = $post->ID; // grabs the current post id from global and then assigns it to thispage ?>
    <?php $pagekids = get_pages("child_of=".$thispage."&sort_column=menu_order"); // gets a list of page that are sub pages of the current page and assigns then to pagekids ?>

    <?php if ($pagekids) { // if there are any values stored in pagekids and therefore the current page has subpages ?>
        <ul>
            <?php wp_list_pages("depth=1&title_li=&sort_column=menu_order&child_of=".$thispage); // display the sub pages of the current page only ?>
        </ul>
            <?php } elseif($post->post_parent)
               $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0"); if ($children) { // if there are no sub pages for the current page ?>
        <ul>
            <?php echo $children; ?>
        </ul>
            <?php } ?>
        </ul>

Out of the question, this is a really good resource since it returns the child pages and even brother’s pages.

ok back to the game…. I trying to create a short code based on this, however if not working, so far I have this:

function filter_store ( $atts ) {
global $post; $thispage = $post->ID;
if ($pagekids) {
   $output .= '<ul>';
      wp_list_pages("depth=1&title_li=&sort_column=menu_order&child_of=".$thispage);
       $output .= '</ul>';   
            } elseif($post->post_parent) 
           $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0"); if ($children) {
       $output .= '<ul>';
            echo $children;
       $output .= '</ul>';
            }
        return $output;
    }

   add_shortcode('filter', 'filter_store');

I have spent around 3 hours trying to find where the error is, and my head is about to explode, I would appreciate any kind of help on this.

Thank in advance.

3 s
3

A shortcode has to return just a string, you should not print something like in wp_list_pages() or echo. From Shortcode API:

The return value of a shortcode handler function is inserted into the post content output in place of the shortcode macro. Remember to use return and not echo – anything that is echoed will be output to the browser, but it won’t appear in the correct place on the page.

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *