• 複数のユーザーがいるサイトがありまして、各自がユーザーページを持っております。
    ドメイン/user名

    通常であれば、authorテンプレートへのリンク(ドメイン/user名)へ飛ぶのですが、特定のユーザーのみが固定ページテンプレートが適用されてしまいます。
    この状況はWP4.1へアップデートしてからなので、それも関係しているかもしれません。

    また、ユーザー名に数字が入っているのが関係あるかもしれないですが、
    akai
    takasaki
    555maru ← このユーザーだけ固定ページテンプレートが適用されてしまう
    555takai
    toritani

    曖昧な質問になりますが、何か考えられる理由はありますでしょうか?

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • ドメイン/user名

    著者アーカイブのパーマリンクは、

    ドメイン/author/user名

    になります。(パーマリンクをデフォルトから変えている場合)

    ドメイン/author/555maru

    なら、おそらく適切に表示されると思います。

    トピック投稿者 kokoen

    (@kokoen)

    返信有難うございます。
    そこは、ドメイン/user名 で表示するようになっているとしか申し上げられないのですが、(わたしが作成したものではなく、わからないので)他のユーザーがちゃんと表示されるのに、特定のユーザーだけがそうなので、なにか数字からはじまるIDがマズいとかがあるのかなと思った次第です。
    固定ページに画像が表示されていたので、attachmentが関係しているような気もします。

    ユーザーのスラッグ(ユーザー名)と、attachmentのページのスラッグが、同じ文字列なんじゃないでしょうか。

    トピック投稿者 kokoen

    (@kokoen)

    返信有難うございます。

    >ユーザーのスラッグ(ユーザー名)と、attachmentのページのスラッグが、
    >同じ文字列なんじゃないでしょうか。

    これで間違いないです。
    わたしが最近の投稿に555maru.jpgという写真をアップロードしているせいでした。
    attachmentのページスラッグは、パーマリンクをカスタム構造にしていると、
    ドメイン/ファイル名
    でも表示されるんですね。これは困りました。

    attachmentのページを無くすとか、authorテンプレートを最優先にする、みたいなことは可能なのでしょうか?

    トピック投稿者 kokoen

    (@kokoen)

    attachment.phpを作成して、author.phpの内容をincludeしてみましたが、ユーザーページへは飛んだものの、ユーザーメタの内容は読み込んでくれませんでした。
    そもそもが画像だと判断されているので、無理なんですね。

    トピック投稿者 kokoen

    (@kokoen)

    現在アップロードするファイル名・ファイルタイトルを自動的に変更して複雑化することにシフトしています。

    function make_filename_hash($filename) {
        $info = pathinfo($filename);
        $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
        $name = basename($filename, $ext);
        return md5($name) . $ext;
    }
    add_filter('sanitize_file_name', 'make_filename_hash', 10);

    これでファイル名は変わりましたが、ファイルのタイトルの変え方がわかりません。
    「画像ファイルタイトル」がそのままページスラッグになるようなので、「ファイル名」を変えても意味無かったです。

    「画像ファイルタイトル」がそのままページスラッグになるようなので、

    WordPress本体の wp_insert_attachment 関数が添付ファイルのページを作る時に、そうなります。実際には、wp_insert_attachment を呼び出す側(例えば media.php の中、media_handle_upload 関数)が、ファイル名の拡張子を除いた部分をタイトルにしてしまいます。

    その後、wp_insert_attachment が wp_insert_post 関数を呼び出して、その中でスラッグにタイトルを自動的に割り当てます。(post.php の3172行目から。$post_name がスラッグ。)

    $post_name = sanitize_title($post_title);

    この sanitize_title 関数と同名のフィルターを使えばスラッグを変更できますが、添付ファイル以外の投稿や固定ページ等のスラッグも対象になってしまうので、不適当かもしれません。

    トピック投稿者 kokoen

    (@kokoen)

    返信有難うございます。
    投稿はいいのですけど、固定ページでスラッグを任意に指定していたとしても書き換わってしまいそうですね?

    あとは、
    ・すべての画像ページのスラッグのみに、attachment- をつける
    ・画像テンプレートの優先順位を一番下に下げる

    とかの記事を探してますけどなかなかないです。。

    トピック投稿者 kokoen

    (@kokoen)

    function wpd_attachment_link( $link, $post_id ){
        $post = get_post( $post_id );
        return home_url( 'attachment-' . $post->post_title );
    }
    add_filter( 'attachment_link', 'wpd_attachment_link', 20, 2 );

    これで画像ページのページスラッグは変更できましたが、管理画面の設定で%postname%としているので、ページスラッグではなくタイトルを読みにいってしまいますね。

    トピック投稿者 kokoen

    (@kokoen)

    add_action( 'add_attachment', 'wpse_70093_modify_uploaded_file_title' );
    function wpse_70093_modify_uploaded_file_title( $attachment_ID )
    {
        $the_post = array();
        $the_post['ID'] = $attachment_ID;
        $the_post['post_name'] = 'attachment-'.$attachment_ID;
        wp_update_post( $the_post );
    }

    以上で添付ファイルページの%postname%の変更がうまくいきました。
    文法的に正しいかはわかりませんが。

10件の返信を表示中 - 1 - 10件目 (全10件中)

トピック「4.1で特定のユーザーのみが固定ページへ飛ばされてしまう」には新たに返信することはできません。