0

I have a strange request. Is it possible to load the content of a Wordpress page in a normal PHP page? For example I want to display the content of the wordpress page 4 in a PHP page that is on the same domain but is not a part of the wordpress installation?

How?

Thank you in advance

3 Answers 3

3

The alternative way. Problem with @david.binda solution is that:

  1. you have to hardcoding a lot of things, (manually write db credientials, table prefix..)
  2. You cannot use content filter (so if you have shortcode in your page, you will see some [something] instead of desired content..)

sure you can load wordpress environment, but...

Just yesterday I wrote an answer to output content in a file and then use it in external app.

So, in the WordPress root folder, create a subfolder named, e.g. 'tmp'.

This folder is a sort of exchange folder from WP to your app. Be sure WordPress can write files in this folder.

In your case you can hook the save_post filter and create the file:

add_action('save_post', 'cache_page');

function cache_page( $postid ) {
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
    $filename = trailingslashit(ABSPATH) . '/tmp/page-4.inc';
    $content = apply_filters('the_content', get_post_field('post_content', 4 ) );
    file_put_contents ( $filename , $content );
}

After that in your app:

$path = 'wordpress/path/here/tmp/page-4.inc';
$page_content = @file_get_contents($path) ? : '';
echo $page_content;

Of course, you have to save again the page after adding the code to generate the file.


If you want with same method you can cache all the pages with a simple edit:

 function cache_page( $postid ) {
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
    $post = get_post($postid);
    if ( $post->post_type != 'page' ) return;
    $filename = trailingslashit(ABSPATH) . '/tmp/page-' . $post->ID . '.inc';
    $content = apply_filters('the_content', $post->post_content );
    file_put_contents ( $filename , $content );
}

Then in your app write a function like this

function wp_page( $id ) {
  $path = 'wordpress/path/here/tmp/page-' . $id . '.inc';
  $page_content = file_exists($path) ? file_get_contents($path) ? : ''; 
  echo $page_content;
}
3
  • I tried your method, the only problem is that wordpress creates a zero bytes page (page-4.inc)!
    – Mark
    Commented Sep 23, 2013 at 13:13
  • Found the typo: get_post_field('post_conteNt', 4 ) );
    – Mark
    Commented Sep 23, 2013 at 13:16
  • @Mark so it worked, now?
    – gmazzap
    Commented Sep 23, 2013 at 13:24
1

I'd opt for a custom SQL query (if that really contains only post_content).

mysql_connect("hostname", "user", "password"); //use your creditials
mysql_select_db("mydb"); //use your WordPress DB name
$result = mysql_query("SELECT * FROM wp_posts"); //replace wp_ with your table prefix
while ($post = mysql_fetch_object($result)) {
    echo $post->post_title; //to get title
    echo $row->post_content; //to get content
}
mysql_free_result($result);

Another option would be to load full WordPress core from your .php file, but it might be an overwhelm for getting just a post. On the other hand, this way you won't get a posibility to apply all filters which does apply in WP display.

2
  • Ye I thought so.....but on the wordpress page I use a shortcode for a plugin. So I thought (now....tired) to add the shortcode directly in my PHP page, and it works. But when I click on a link in that page it brings me to the wordpress page. Is there a way to open the link directly in my normal PHP page or the easy way is to use in wordpress the template of my PHP page?
    – Mark
    Commented Sep 23, 2013 at 12:44
  • Shortcodes are parsed in the_content filter. Use the link I've provided above to load WP from your external PHP file than: davidwalsh.name/wordpress-recent-posts Commented Sep 23, 2013 at 12:45
0

Put mypage.php into the root folder of your WP-instance and start with this line:

<?php
   require_once(__DIR__ . "/../public/wp-load.php");

This loads the whole WP machinery into memory so that you can use all WP functions and the like.

If you want to, you can make the page accessible to logged-in users only:

if (current_user_can( 'edit_posts' )) {
   // your code ...
})
1
  • Did you notice that you answered a question from 2013? not to dismiss your answer by any way but this is a very old question with a already accepted and extensive answer. Commented Sep 23, 2021 at 13:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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