WordPress外部的WordPress页面内容

时间:2013-09-23 作者:Mark

我有一个奇怪的要求。是否可以在普通PHP页面中加载Wordpress页面的内容?例如,我想在一个PHP页面中显示wordpress第4页的内容,该页面位于同一个域中,但不是wordpress安装的一部分?

怎样

提前谢谢你

3 个回复
最合适的回答,由SO网友:gmazzap 整理而成

另一种方式。问题在于@david.binda 解决方案是:

您必须对许多内容进行硬编码(手动写入数据库凭据、表前缀…)

  • 您不能使用内容过滤器(因此,如果您的页面中有短代码,您将看到一些[something] 而不是所需的内容……)
  • 当然可以加载wordpress环境,但是。。。

    就在昨天,我写道an answer 将内容输出到文件中,然后在外部应用程序中使用。

    因此,在WordPress根文件夹中,创建一个名为“tmp”的子文件夹。

    此文件夹是从WP到应用程序的一种exchange文件夹。确保WordPress可以在此文件夹中写入文件。

    在你的情况下,你可以save_post 筛选并创建文件:

    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 );
    }
    
    之后在应用程序中:

    $path = \'wordpress/path/here/tmp/page-4.inc\';
    $page_content = @file_get_contents($path) ? : \'\';
    echo $page_content;
    
    当然了,you have to save again the page after adding the code to generate the file.

    如果希望使用相同的方法,可以通过简单的编辑缓存所有页面:

     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 );
    }
    
    然后在应用程序中编写如下函数

    function wp_page( $id ) {
      $path = \'wordpress/path/here/tmp/page-\' . $id . \'.inc\';
      $page_content = file_exists($path) ? file_get_contents($path) ? : \'\'; 
      echo $page_content;
    }
    

    SO网友:david.binda

    我会选择自定义SQL查询(如果它真的只包含post\\u内容)。

    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);
    
    另一种选择是load full WordPress core from your .php file, 但这可能是一个压倒性的,因为只得到一个职位。另一方面,这样您就不可能应用所有在WP显示中应用的过滤器。

    SO网友:johnrbnz

    mypage.php 进入WP实例的根文件夹,并从以下行开始:

    <?php
       require_once(__DIR__ . "/../public/wp-load.php");
    
    这会将整个WP机器加载到内存中,以便您可以使用所有WP函数等。

    如果愿意,可以使该页面仅可供登录用户访问:

    if (current_user_can( \'edit_posts\' )) {
       // your code ...
    })
    

    结束

    相关推荐

    当我更新到WP 3.6.1时,_Content上的过滤器停止工作

    我创建了一个过滤器,在我的博客文章的图像上添加了一个pin按钮,这在玩了很多次之后就奏效了。几周后,我更新到3.6.1,过滤器停止工作。新版本中是否有更改,阻止了对\\u内容的筛选工作?function cd_insert_pinterest($content) { global $post; $postID = $post->ID; if( is_singular() && is_main_query()