プログラマー社長の「日々発見」

三輪訓裕のブログ。http://www.imcshop.com/ やhttp://www.autoproject.biz/中心としたEコマースサイトを運営。現在は、仕事でつかえる人工知能・機械学習プログラムの開発を行う。日々の発見を公開中。


下記ページに詳細が載っていますが、

https://memocarilog.info/wordpress/theme-custom/3909

下記の内容をfunction.phpに記入します。
ブログがなくなるといけないので、備忘録です。
 

add_action('init', 'myposttype_rewrite');
function myposttype_rewrite() {
    global $wp_rewrite;
  
    $queryarg = 'post_type=投稿タイプ名&p=';
    $wp_rewrite->add_rewrite_tag('%投稿タイプ名_id%', '([^/]+)',$queryarg);
    $wp_rewrite->add_permastruct('投稿タイプ名', '/投稿タイプ名/%投稿タイプ名_id%.html', false);
  
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_permalink($post_link, $id = 0, $leavename) {
    global $wp_rewrite;
    $post = &get_post($id);
    if ( is_wp_error( $post ) )
        return $post;
    $newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
    $newlink = str_replace('%'.$post->post_type.'_id%', $post->ID, $newlink);
    $newlink = home_url(user_trailingslashit($newlink));
    return $newlink;
} 

ワードプレスのデータ移管等で、サーバー間で直接、画像データをやりとりするためのプログラム。
ローカルのPCにデータを落とす必要がないので楽。

引っ越し先のサーバーでFTPコマンドを使っても、FTPコマンドがフォルダーのダウンロードに対応できないため、PHPのプログラムを使って、取得します。

下記のサイトのコードを、ほんの少し変更しました。
https://stackoverflow.com/questions/5650439/downloading-a-folder-through-with-ftp-using-php

<?php
set_time_limit(0);
$ftp_server = "server IP address or server url";
$conn_id = ftp_connect ($ftp_server)
or die("Couldn't connect to $ftp_server");

$login_result = ftp_login($conn_id, "ftp id", "ftp password");
if ((!$conn_id) || (!$login_result))
die("FTP Connection Failed");

$remote_path = "server path for the target directoy";
$local_path = "local path to save the files";

ftp_sync ($remote_path, $local_path);

ftp_close($conn_id);

// ftp_sync - Copy directory and file structure
function ftp_sync ($dir, $local_path=NULL) {

global $conn_id;

if ($dir != ".") {
if (ftp_chdir($conn_id, $dir) == false) {
echo ("Change Dir Failed: $dir<BR>\r\n");
return;
}
$mkdir_path = ($local_path)?$local_path:$dir;
if (!(is_dir($mkdir_path)))
mkdir($mkdir_path);
chdir ($mkdir_path);
}

$contents = ftp_nlist($conn_id, ".");
foreach ($contents as $file) {

if ($file == '.' || $file == '..')
continue;

if (@ftp_chdir($conn_id, $file)) {
ftp_chdir ($conn_id, "..");
ftp_sync ($file);
}
else
if(!file_exists ( $file )){
ftp_get($conn_id, $file, $file, FTP_BINARY);
}
}

ftp_chdir ($conn_id, "..");
chdir ("..");

}

あるサイトで、フェースブックのタイムライン投稿でURLを貼ったら403forbiddenが返ってくるという事象が発生しました。


・MTからワードプレスに切り替えた
・ワードプレスのページによっては、正常に表示された
・サーバーはさくらインターネット 


テーマを切り替えたり、プラグインを停止したり、いろいろやっても改善せず。
ワードプレスから出力されたHTMLを別のサーバーで確認したら、それはOK。

ということで、サーバーの何らかの設定に問題あり。

次に .htaccess を変更して確認。これでも改善せず。


ここまで来て思い出したのが、「さくらって海外のIPアドレスを拒否する設定」があったような・・・と。
もしかしたらと思い、その設定を確認すると、海外のIP拒否になってたので、海外のIPもOKになるように変更。

すると、正常に表示されるようになりました。

でも、ページによっては、正常に表示されていた。何でだろう。フェースブックのサーバー、日本にも一部、置いてあって、正常に表示されたのは、たまたま日本のサーバーからだったのかな。そのキャッシュが残っていたから、良かったのかな。

ただ、ワードプレスに移管前は、正常に表示できてたらいいんだよね。謎。。。  

 

↑このページのトップヘ