質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

3503閲覧

外部のWordpressから読み込んだ記事を別のWordpressに自動で投稿したいです

ByronHasegawa

総合スコア255

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/03/17 03:33

編集2016/03/18 10:32

Aサイトから読み込んだ記事をBサイトに自動で投稿させたいです。

また、そのAサイトの記事を更新したらBサイトで自動生成された記事も更新されるようにしたいです。

今の段階でのソースです。

global $wpdb; $results = $wpdb->get_results(" SELECT post_title FROM wp_posts "); foreach ($results as $post) { $page_exists = $post->post_title; } //その他DB接続設定 $another_db_user = 'user'; $another_db_pass = 'pass'; $another_db_name = 'name'; $another_db_host = 'localhost'; $another_tb_prefix = 'wp_'; $mydb = new wpdb($another_db_user,$another_db_pass,$another_db_name,$another_db_host); $mydb->set_prefix($another_tb_prefix); //一覧情報取得 $result = $mydb->get_results(" SELECT m0.post_title, m0.id, m0.post_name, m0.guid FROM ( select post_title, id, guid, post_name from wp_posts where post_type = 'bio' AND post_status = 'publish' ) AS m0 "); foreach ($result as $value) { if( $value->post_title == $page_exists ) { //何もしない } else { $my_access = Array( 'post_author' => '1', 'post_title' => ''.$value->post_title.'', 'post_status' => 'publish', 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_name' => ''.$value->post_name.'', 'post_type' => 'page', 'post_parent' => '115822', 'page_template' => 'template-profile-info.php' ); wp_insert_post($my_access); } }

これだと記事は重複されて繰り返し自動投稿します。

###別のソースの案

$this_posts = get_posts( array( 'post_type' => 'page', 'page_template' => 'template-profile-info.php' ) ); $this_post_titles = wp_list_pluck( $this_posts, 'post_title' ); // set the DB creds $another_db_user = 'user'; $another_db_pass = 'pass'; $another_db_name = 'name'; $another_db_host = 'localhost'; $another_tb_prefix = 'wp_'; // setup the DB connection $mydb = new wpdb( $another_db_user, $another_db_pass, $another_db_name, $another_db_host ); $mydb->set_prefix( $another_tb_prefix ); //一覧情報取得 $result = $mydb->get_results(" SELECT m0.post_title, m0.id, m0.post_name, m0.guid FROM ( select post_title, id, guid, post_name from wp_posts where post_type = 'bio' AND post_status = 'publish' ) AS m0 "); foreach ( $result as $value ) { if ( in_array( $value->post_title, $this_post_titles ) ) { } else { $my_access = array( 'post_author' => '1', 'post_title' => $value->post_title, 'post_status' => 'publish', 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_name' => $value->post_name, 'post_type' => 'page', 'post_parent' => '115822', 'page_template' => 'template-profile-info.php' ); wp_insert_post( $my_access ); } }

###さらに別のソースの案

function wpse_20160318_do_db_sync() { // query the DB global $wpdb; $result = $wpdb->get_results( " SELECT post_name FROM wp_posts WHERE post_status = 'publish' AND post_type = 'page' " ); // for all the results, let's check against the slug. foreach ( $result as $r ) { // see if we can find it... $post = get_page_by_path( $r->post_name ); } // set the DB creds $another_db_user = 'user'; $another_db_pass = 'pass'; $another_db_name = 'name'; $another_db_host = 'localhost'; $another_tb_prefix = 'wp_'; // setup the DB connection $mydb = new wpdb( $another_db_user, $another_db_pass, $another_db_name, $another_db_host ); $mydb->set_prefix( $another_tb_prefix ); //一覧情報取得 $results = $mydb->get_results(" SELECT m0.post_title, m0.id, m0.post_name, m0.guid FROM ( select post_title, id, guid, post_name from wp_posts where post_type = 'bio' AND post_status = 'publish' ) AS m0 "); foreach ( $results as $value ) { if ( ! $post ) { // We're cool, let's create this one. $my_access = Array( 'post_author' => '1', 'post_title' => ''.$value->post_title.'', 'post_status' => 'publish', 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_name' => ''.$value->post_name.'', 'post_type' => 'page', 'post_parent' => '115822', 'page_template' => 'template-profile-info.php' ); wp_insert_post($my_access); } else { // No need to duplicate this one } } } // using on init to make sure the DB is ready to go add_action( 'init', 'wpse_20160318_do_db_sync' );

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

自己解決しました。

###完成したソースはこちらです

function profile_info() { // set the DB creds $another_db_user = 'user'; $another_db_pass = 'pass'; $another_db_name = 'name'; $another_db_host = 'localhost'; $another_tb_prefix = 'wp_'; $another_post_type = 'your_post_type'; $another_post_status = 'publish'; $mydb = new wpdb( $another_db_user, $another_db_pass, $another_db_name, $another_db_host ); $mydb->set_prefix( $another_tb_prefix ); $result = $mydb->get_results( " SELECT ID, post_title, post_name, guid, post_content, post_excerpt, post_date, post_date_gmt, post_modified, post_modified_gmt FROM wp_posts WHERE post_status = '$another_post_status' AND post_type = '$another_post_type' " ); $another_db_post_id_meta_key = 'another_db_post_id'; $post_type = 'page'; $mods = array ( 'post_status' => 'publish', 'post_author' => '1', 'comment_status' => 'closed', 'ping_status' => 'closed', 'page_template' => 'your_template.php', 'post_parent' => 'post_parent_ID', 'post_type' => $post_type, ); foreach ( $result as $r ) { $post_title = wp_strip_all_tags( $r->post_title ); // see if we can find it by title... $post = get_page_by_title( $post_title, OBJECT, $post_type ); if ( ! $post ) { // title wasn't found... but let's check the meta $meta_args = array ( 'post_type' => array ( $post_type ), 'meta_query' => array ( array ( 'key' => $another_db_post_id_meta_key, 'compare' => '=', 'type' => 'NUMERIC', 'value' => $r->ID, ), ), ); $meta_posts = get_posts( $meta_args ); // set the post to the first item in the list, if it isn't empty if ( ! empty( $meta_posts ) ) { list( $post ) = $meta_posts; } } if ( ! $post ) { // Can't find the post, let's create this one. // Data from another DB $clone = array ( 'post_title' => $post_title, 'post_name' => $r->post_name, 'post_excerpt' => $r->post_excerpt, 'post_modified' => $r->post_modified, 'post_modified_gmt' => $r->post_modified_gmt, ); // Merge with our defaults $args = array_merge( $clone, $mods ); // create new post $post_id = wp_insert_post( $args ); if ( $post_id instanceof WP_Error ) { // failed to create new post // wp_die( 'Failed to create ' . $post_id ); } else { // new post created $post = get_post( $post_id ); // add clone tag that we can check later add_post_meta( $post->ID, $another_db_post_id_meta_key, $r->ID, false ); } } else { // no need to dup } } } // using on init to make sure the DB is ready to go add_action( 'init', 'profile_info' );

投稿2016/03/22 02:25

ByronHasegawa

総合スコア255

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答依頼をいただき、ありがとうございます。

どのような目的でそのようなことを実現したいのか意図がつかめないのですが……

もしかしたら、おなじコンテンツを保持したサイトをふたつ作りたいということでしょうか。
そうだとすると、SEOの観点からすると重複コンテンツとみなされ、サイト評価をさげられたり被リンク評価が分散するなど、さまざまな不利益が生じるおそれがありますので注意が必要です。

仮にそうしたことを実現しようとした場合、RSSImport(リンク)というプラグインが役に立つのではないでしょうか。
RSSImport は、他のサイトの最新情報を RSSを使って表示させるプラグインです。くわしい使い方は「RSSImport 使い方」などで検索していただければおわかりになるはずです。

的確な回答になっていないかもしれませんが、以上、ご参考いただければ幸いです。

投稿2016/03/18 02:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ByronHasegawa

2016/03/18 02:36

ありがとうございます。 カスタム投稿にカスタムフィールドを使用しているので、RSSImportだけでは全てが取得できないのです。 いろいろ試してみます。
退会済みユーザー

退会済みユーザー

2016/03/18 07:20

ByronHasegawaさん、コメント(返信)をいただきありがとうございます。 回答依頼をいただいたにもかかわらず、お役にたてず失礼しましts。 いずれにしても、SEOの件についてはご注意ください。
ByronHasegawa

2016/03/18 07:30

SEOについては気を付けたいと思います。 ありがとうございます。
1000

2018/08/09 09:25

こういう回答見るたびいつも思う。 「どのような意図」があるかは回答者の予想だにしない理由がいくらでも存在し得る。回答者がそれを「掴む」必要性と正当性がどこにあるのかと。 そしていちいちそれを説明することは問題解決になんら役に立たないばかりか話題がすり替えられていてなんの生産性もないと思う。 とても憤りを感じる。 回答者は良かれと思ってかもしれないが、今回の場合においてはもしSEOについて不利なことを十分に質問者さんが知っていた場合、斜めの角度から当たり前のことをドヤ顔でマウンティングされる感覚になる。いやそれ関係ないし、知ってるし、わざわざ説明しないとだめなの?と思ってしまうのは自分だけではないはず。
guest

0

発想は面白いですね。

でもこれだと、すべての記事が再投稿されますよね。
foreachのすぐ下に、投稿する側の記事を調べて、投稿されているかどうか判断し、投稿されていたらスキップするような処理を入れてはどうでしょうか。

重複投稿の判断が肝になりそうですが、Wordpressはあんまり詳しくないんで、調べてません。
頑張ってみてください。

投稿2016/03/18 01:37

shi_ue

総合スコア4437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ByronHasegawa

2016/03/18 02:01

ありがとうございます。 いろいろ試してみます!
guest

0

依頼ありがとうございます。

瞬時にBサイトも更新というのはなかなか難しいですが、
私ならBでクーロン走らせて
AのAPI作るorREST API使う ですね。

別件ですが、カスタムフィールド値を保存する際は
https://github.com/wokamoto/wp_post_helper
こちらのヘルパーが便利ですよ

投稿2016/03/18 03:10

ki6ool

総合スコア150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ByronHasegawa

2016/03/18 05:02

ありがとうございます。 カスタムフィールドの情報助かります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問