Can Wordpress posts be rendered dynamically?

2019-04-08 13:34发布

问题:

I want to make a blog page which is generating content for particular user based on his/her Facebook likes, activity etc. For example I like Shakira and Coca Cola on Facebook. When entering the blog and connecting via Facebook, the blog gets that info and searches for Shakira's YouTube video through YouTube API and shows me the video in a WordPress post. After the blog searches for news connected with Coca Cola and shows news about it also in a post.

There is no problem with FB connect, YouTube search or Google search. My problem is WordPress. As there can be a lot of users and a lot of content can be generated for each user, I can't save every post in MySQL table. I want to generate posts dynamically. I'm not asking for code here, I just want to hear good solutions and ideas how can this be done.

回答1:

As a solution you could use the 404 page to generate this dynamic post.

There's a blog post here that gives a similar solution: http://www.blogseye.com/creating-fake-wordpress-posts-on-the-fly/

The code used to generate the fake posts:

function kpg_f_content() {
    global $wp_query;
    if($wp_query->is_404 ) {
        $id=-42; // need an id
        $post = new stdClass();
            $post->ID= $id;
            $post->post_category= array('uncategorized'); //Add some categories. an array()???
            $post->post_content='hey here we are a real post'; //The full text of the post.
            $post->post_excerpt= 'hey here we are a real post'; //For all your post excerpt needs.
            $post->post_status='publish'; //Set the status of the new post.
            $post->post_title= 'Fake Title'; //The title of your post.
            $post->post_type='post'; //Sometimes you might want to post a page.
        $wp_query->queried_object=$post;
        $wp_query->post=$post;
        $wp_query->found_posts = 1;
        $wp_query->post_count = 1;
        $wp_query->max_num_pages = 1;
        $wp_query->is_single = 1;
        $wp_query->is_404 = false;
        $wp_query->is_posts_page = 1;
        $wp_query->posts = array($post);
        $wp_query->page=false;
        $wp_query->is_post=true;
        $wp_query->page=false;
    }
}

add_action('wp', 'kpg_f_content');

Make this into a plugin or add it to the functions.php file.



回答2:

Alternative solution:

add_filter('init', 'custom_function');
function custom_function(){
    if(is_admin()==true) return false;

    //check URL
    if($_SERVER['REQUEST_URI'] != '/hello/') return false;

    echo 'Hello.';
    exit();
    }


回答3:

This is an another way to create posts dynamically

    $post = array(
  'ID'             => [ <post id> ] // Are you updating an existing post?
  'post_content'   => [ <string> ] // The full text of the post.
  'post_name'      => [ <string> ] // The name (slug) for your post
  'post_title'     => [ <string> ] // The title of your post.
  'post_status'    => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ] // Default 'draft'.
  'post_type'      => [ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] // Default 'post'.
  'post_author'    => [ <user ID> ] // The user ID number of the author. Default is the current user ID.
  'ping_status'    => [ 'closed' | 'open' ] // Pingbacks or trackbacks allowed. Default is the option 'default_ping_status'.
  'post_parent'    => [ <post ID> ] // Sets the parent of the new post, if any. Default 0.
  'menu_order'     => [ <order> ] // If new post is a page, sets the order in which it should appear in supported menus. Default 0.
  'to_ping'        => // Space or carriage return-separated list of URLs to ping. Default empty string.
  'pinged'         => // Space or carriage return-separated list of URLs that have been pinged. Default empty string.
  'post_password'  => [ <string> ] // Password for post, if any. Default empty string.
  'guid'           => // Skip this and let Wordpress handle it, usually.
  'post_content_filtered' => // Skip this and let Wordpress handle it, usually.
  'post_excerpt'   => [ <string> ] // For all your post excerpt needs.
  'post_date'      => [ Y-m-d H:i:s ] // The time post was made.
  'post_date_gmt'  => [ Y-m-d H:i:s ] // The time post was made, in GMT.
  'comment_status' => [ 'closed' | 'open' ] // Default is the option 'default_comment_status', or 'closed'.
  'post_category'  => [ array(<category id>, ...) ] // Default empty.
  'tags_input'     => [ '<tag>, <tag>, ...' | array ] // Default empty.
  'tax_input'      => [ array( <taxonomy> => <array | string> ) ] // For custom taxonomies. Default empty.
  'page_template'  => [ <string> ] // Requires name of template file, eg template.php. Default empty.
);  
    $post_id = wp_insert_post($post);

Which helps me alot!!.

For more information about wp_insert_post clickhere