WordPress.org

Ready to get started?Download WordPress

Forums

Display specific posts on pages (4 posts)

  1. tatas09
    Member
    Posted 2 years ago #

    So I'm having a problem.
    In the website every product is a post, but when we add new products we want something like a newsletter, mostly like a post so in the sidebar of the home page you can see the new products or events of the month.
    I'm using pages because I don't want to re-post a product on every new newsletter so I junt wanna display the posts inside the page.
    In the products page I separate every product by category and sub-category but since I want to group specific post to publish them on the sidebar I think that pages was the best way to do it.

    Right now I'm using this code:

    <?php
    $productos = new WP_Query(array(
    'post__in'=> array(81, 83),
    'orderby'=>'title',
    'order'=>'ASC'
    )
    ); if ($productos->have_posts()) : while ($productos->have_posts()) : $productos->the_post();
    ?>

    It display the posts with the id of 81 and 83, I would like to show post by slug using 'name' as the codex says because is going to take some time to be checking the ids of the new post, insted of using the name of every new product but It dosen't work in array or I'm doing something wrong.

    Now I will love to make something like this work

    $names = get_post_meta($post->ID, "names", $single = true); 
    
    $productos = new WP_Query(array(
    'name'=> array($names),
    'orderby'=>'title',
    'order'=>'ASC'
    )
    );

    So every time I publish a new page I just write the slugs of the post I want to include in the page, as you can see I'm not very good with php but I trying to learn and I search a lot for something that could work before asking in here.

    I try the ggis inline post plugin and although it works I need the id for every post I want to include and I will need to edit the plugin because I want a different order in the output of the post thats why I don't like to depend to much on plugins.

    I hope someone can help me with this and sorry for my bad english (not my first language)

  2. vtxyzzy
    Member
    Posted 2 years ago #

    You can get the IDs in an array by using this:

    $name_string = get_post_meta($post->ID,'names',true);
    
    $names_quoted = implode(',', array_map(
          function($name) { return "'" . trim($name) . "'"; },
          explode(',',$name_string)
          )
       );
    
    $sql = "SELECT ID FROM $wpdb->posts WHERE post_name IN ($names_quoted) AND post_status = 'publish' and post_date <= NOW()";
    
    $ids = $wpdb->get_col($sql);

    Then use $ids in the post__in parameter.

  3. vtxyzzy
    Member
    Posted 2 years ago #

    I forgot to mention that the slugs should be stored in a comma-separated list in the 'names' Custom Field.

  4. tatas09
    Member
    Posted 2 years ago #

    Wow that is great vtxyzzy. Yesterday I find a workaround using Shortcodes and it adds more flexibility but I'm going to save that code for another time. Thank you!

    So I put this on my functions.php page

    function productos($atts, $content = null) {
        extract(shortcode_atts(array(
            "slug" => '',
            "query" => ''
        ), $atts));
        global $wp_query,$post;
        $temp = $wp_query;
        $wp_query= null;
        $wp_query = new WP_Query(array(
        'name'=> $slug,
        ));
        if(!empty($slug)){
            $query .= '&name='.$slug;
        }
        if(!empty($query)){
            $query .= $query;
        }
        $wp_query->query($query);
        ob_start();
        ?>
        <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
            <h1><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h1>
            <div><?php the_content() ?></div>
        <?php endwhile; ?>
    
        <?php $wp_query = null; $wp_query = $temp;
        $content = ob_get_contents();
        ob_end_clean();
        return $content;
    }
    add_shortcode("producto", "productos");

    And in my page template I just write [producto slug="MY-SLUG"] and that way I can display multiple post just with the slugs. Hope someone find this useful.

Topic Closed

This topic has been closed to new replies.

About this Topic