0

まず、これが以前に処理されたことがある場合は申し訳ありませんが、私はかなりの時間をかけて投稿を検索しても無駄になりました。

WordpressのブログとConcrete5のサイトがあります。私はConcrete5サイトで最新の3つのWordpressブログ投稿を書き出そうとしています。両方のサイトが同じサーバー上にあり、内部RSSが無効になっているため、RSSを使用できません(これを回避する方法はありますか?)。

私は具体的なブロックを作成し、このコードをview.phpに配置しました...

<?php 
   define('WP_USE_THEMES', false);
   require('path-to-wordpress/wp-blog-header.php');
?>

...これにより、「データベース接続の確立中にエラーが発生しました」という結果になります。
これをConcreteの外部で実行すると、正常に機能します(現在、このコードをサーバーの他の場所で使用しており、プローブは使用していません)
私もwp_load.phpで試しましたが、同じ結果です。


これが本当に明白な場合は申し訳ありませんが、私はしばらくの間それに取り組んできました:(
よろしくお願いします。

4

1 に答える 1

1

悲しいことに、Wordpressをロードするためのこの単純なアプローチは、何らかの理由、ある種の矛盾する定義などのために具体的には機能しません。同じサーバー上のConcrete5サイトにWordpressの投稿を読み込もうとしている場合、サーバーがループを防ぐために内部要求をブロックすることがあるため、RSSの使用が機能しないことに気付くかもしれません。

これは私が自分自身を見つけた位置であるため、 Concrete5フォーラムに「jcrens8392」によって投稿されたコードに基づいて自分でWordpressテーブルにアクセスすることにしました。

// posts and stuff
$category = 3
$items = 4

// wordpress db stuff
$dbUser = 'user';
$dbPass = 'password';
$dbHost = 'localhost';
$dbName = 'name';


// connect to wordpress database
$conn = mysql_connect($dbHost, $dbUser, $dbPass);


// handle connection errors
if(!$conn) {
    $aDebug['Unable to connect to DB'] = mysql_error();
} elseif(!mysql_select_db($dbName, $conn)) {
    $aDebug['Unable to select database'] = mysql_error();
}


// make SQL query
else {
    $sQuery = "SELECT wp_posts.post_date, wp_posts.post_content , wp_posts.guid , wp_posts.post_title, wp_posts.post_excerpt, wp_posts.post_name FROM wp_posts , wp_term_relationships WHERE post_type = 'post' AND post_status = 'publish' AND wp_posts.ID = wp_term_relationships.object_id AND wp_term_relationships.term_taxonomy_id = ".$category." ORDER BY post_date DESC LIMIT ".$items;
    $rPosts = mysql_query($sQuery, $conn);
}


// plonk posts into a convinient array
$posts = array();
while($row = mysql_fetch_array($rPosts)){
        $excerpt = $controller->getExcerpt( utf8_encode( strip_tags( $row['post_content'] ) ) , 0 , 200 ) .' <a href="'.$row['guid'].'">Read More &#8594;</a>';
        $date = $controller->simplifyDate( $row['post_date'] );
        $temp = array ( 'post_title' => $row['post_title'] , 'post_excerpt' =>  $excerpt , 'post_date' => $date , 'post_link' => $row['guid'] );
        array_push( $posts , $temp );
    }



これらの関数をcontroller.php( phpsnaps からの抜粋関数)に入れました...

function getExcerpt($str, $startPos=0, $maxLength=100) {
    if(strlen($str) > $maxLength) {
        $excerpt   = substr($str, $startPos, $maxLength-3);
        $lastSpace = strrpos($excerpt, ' ');
        $excerpt   = substr($excerpt, 0, $lastSpace);
        $excerpt  .= '...';
    } else {
        $excerpt = $str;
    }

    return $excerpt;
}


function simplifyDate($str) {
    $months = array("January","February","March","April","May","June","July","August","September","October","November","December");
    $strs = split ( ' ' , $str );
    $date = split ( '-' , $strs[0] );
    $month = $months[ $date[1] - 1 ];
    $day =  $date[2];
    $year = $date[0];
    return $day . ' ' . $month . ' ' . $year;
}



これは実際には理想的なソリューションではありませんが、機能するという明確な利点があります。これが誰かを助けることを願っています。

于 2012-11-24T14:24:17.257 に答える