wordpress」タグアーカイブ

WordPressでのカスタム投稿タイプの記事一覧ページ、アーカイブページの設定(URLとかテンプレート名とか)

まずCustom Post Type UIを利用している場合は、
カスタム投稿タイプにアーカイブページを有効にする。

CPT UIの設定画面で有効にします。


記事一覧ページ

以下のURL及びテンプレートを利用します。

//URL
http://{ドメイン名}/{カスタム投稿のスラッグ名}
//テンプレート名
archive-{カスタム投稿のスラッグ名}.php

(例)カスタム投稿がmenuの場合

//URL
http://{ドメイン名}/menu
//テンプレート名
archive-menu.php

記事詳細ページ

パーマリンク設定は ‘/%postname%’ にした例です。

//URL
http://{ドメイン名}/{カスタム投稿のスラッグ名}/{投稿のスラッグ名}
//テンプレート名
single-{カスタム投稿のスラッグ名}.php

(例)カスタム投稿がmenuの場合

//URL
http://{ドメイン名}/menu/yakiniku
//テンプレート名
single-menu.php

タクソノミー(カテゴリ、タグ)一覧ページ

以下のURL及びテンプレートを利用します。

//URL
http://{ドメイン名}/{カスタム'タクソノミー'のスラッグ名}/タグのスラッグ
//テンプレート名
taxonomy-{カスタム'タクソノミー'のスラッグ名}.php

(例)カスタムタクソノミースラッグmenu_typeの場合

//URL
http://{ドメイン名}/menu_type/meet
//テンプレート名
taxonomy-menu_type.php

nginxのPHPのアップロードファイルサイズの変更方法。

nginxのPHPのアップロードファイルサイズの変更方法。

WordPressで画像をアップした所画像がアップできませんでした。
結果を3行でいうと以下で解決。

  • nginxのclient_max_body_sizeを上げる。
  • php.iniで、upload_max_filesizeを上げる
  • php-fpmのrestartとnginxのreload

以下いくつか段階があったようなのでその解決方法の詳細

1、httpエラーがでる。

この場合はnginxが送信できるhttpのbodyサイズが不足していました。
私の環境の場合は、以下の設定ファイルを書き換えてnginxをreloadして解決しました。

ファイル : /etc/nginx/nginx.conf (共通の設定ファイルの最後当たりに追加)

http {
    (中略)
    client_max_body_size 50M;
    include /etc/nginx/conf.d/*.conf;
}

(ドメインごとの設定ファイルなどで変更ができるように includeの前にいれました。)

2、PHPのファイルアップロード制限

しばらく大丈夫だったのですが、今度はWordPressでアップロードした場合に上限だとエラーメッセージがでました。

6000x4028-17M.jpg exceeds the maximum upload size for this site.

これはPHPの設定 ‘upload_max_filesize’ が原因でした。
まずサーバーで値を確認。

# php --info | less
//'upload_max_filesize'を検索。
upload_max_filesize => 2M => 2M
//と2MBにっているさらに'php.ini'で検索してphp.iniの場所を確認。
 Loaded Configuration File => /etc/php.ini

/etc/php.iniを編集します。

# vim /etc/php.ini
//以下の部分を元の 2Mから10Mへ変
upload_max_filesize = 10M
//保存して10Mになっていることを確認
# php --info
upload_max_filesize => 10M => 10M

そしてnginx再起動

# systemctl restart nginx

でアップロードすると、あれできない。。と少し悩む。
あーphp-fpmもかと。

# systemctl restart php-fpm.service

として解決

WordPressでよく忘れる関数とかフックとか

WordPressでよく忘れる関数とかフックとか

任意にget_postで取得した$postの設定

任意にget_post($post_id)などで持ってきた場合は、the_content()とかループ内での関数がつかえないので、setup_postdata($post);を行う必要がある。

$post_id = (int)$_GET['p'];
$post = get_post( $post_id );
setup_postdata($post);

記事取得からリスト

<?php
$args = array(
  'cat' => 1,
  'posts_per_page' => 5
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
  while ( $the_query->have_posts() ) : $the_query->the_post();
  //ここにループするテンプレート
  endwhile;
endif;
wp_reset_postdata();
?>

<ul>
    <?php
    $query = new WP_Query(array('posts_per_page' => 6,'post_status'=>'publish','category_name'=>'event'));
    $posts = $query->get_posts();
    foreach($posts as $key => $post){
        $cat = get_the_category($post->ID);
        if(!empty($cat[1])){
            $cat = array(
                'name' =>$cat[1]->name,
                'slug' =>$cat[1]->slug
            );
        }else{
            $cat = array(
                'name' =>'',
                'slug' =>''
            );
        }
        ?>
        <li>
            <a href="<?php the_permalink() ?>">
                <span class="date"><?php the_time('Y-m-d'); ?></span>
                <span class="category cat-<?php echo $cat['slug'] ?>"><?php echo $cat['name']; ?></span>
                <span class="body"><?php the_title(); ?></span>
            </a>
        </li>
        <?php
    }
    wp_reset_query();
    ?>
</ul>

カスタム投稿タイプのカテゴリでの絞込

<ul>
<?php
$args = array(
  'post_type'=>'product',
  'posts_per_page' => -1,
  'post_status'=>'publish',
  'tax_query' => array(
    array(
      'taxonomy' => 'product_category',
      'field'    => 'slug',
      'terms'    => 'heart',
    ),
  )
);
$query = new WP_Query($args);
$posts = $query->get_posts();
echo "<pre>".print_r($posts,true)."</pre>";exit;
foreach($posts as $key => $post){
  ?>
  <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
  <?php
}
wp_reset_query();
?>
</ul>

WordPressカスタムテーマ初期セットアップのメモ

WordPressカスタムテーマ初期セットアップのメモ

いつもダウンロードして適当に設定していくのでメモを兼ねてまとめてみました。

事前準備

DB作成

$ mysql -uroot -p
mysql> CREATE DATABASE `iemono` /*!40100 DEFAULT CHARACTER SET utf8 */;

WordPressダウンロード〜解凍リネーム

$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ tar zxvf ./latest-ja.tar.gz
$ mv wordpress wp
$ rm latest-ja.tar.gz

WordPress関連設定

パーミッションなど設定(開発環境のため簡単に777にしてます。本番はちゃんと設定する

$ mkdir wp/wp-content/upgrade
$ mkdir wp/wp-content/uploads
$ chmod 777 wp/wp-content/upgrade wp/wp-content/uploads wp/wp-content/plugins wp/wp-content/languages wp/wp-content/themes 

.htaccessファイル設置(パーマリンク用)

$ vim wp/.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

インデックスファイル作成

$ vim ./index.php

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );

設定ファイル(wp-config)設定

$ mv wp-config-sample.php wp-config.php
$ wp/wp-config-sample.php wp/wp-config.php
$ vim wp/wp-config.php

(具体的ところだと)

  • FS_METHODを’direct’に
  • DB設定
  • salt設定

環境ごとの接続情報メモ

define('ENV_PRODUCTION','env_production');
define('ENV_STAGING','env_staging');
define('ENV_PREVIEW','env_preview');
define('ENV_LOCAL','env_local');

switch (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '') {
    case 'example.com':
        define('ENV',ENV_PRODUCTION);
        define('DB_NAME', 'xxx');
        define('DB_USER', 'xxx');
        define('DB_PASSWORD', 'xxx');
        define('DB_HOST', 'xxx');
        break;

    case 'staging.example.com':
        define('ENV',ENV_STAGING);
        define('DB_NAME', 'xxx');
        define('DB_USER', 'xxx');
        define('DB_PASSWORD', 'xxx');
        define('DB_HOST', 'xxx');
        break;

    case 'preview.example.com':
        define('ENV',ENV_STAGING);
        define('DB_NAME', 'xxx');
        define('DB_USER', 'xxx');
        define('DB_PASSWORD', 'xxx');
        define('DB_HOST', 'xxx');
        break;

    default:
        define('ENV',ENV_LOCAL);
        define('DB_NAME', 'example');
        define('DB_USER', 'root');
        define('DB_PASSWORD', 'root');
        define('DB_HOST', 'localhost');
        break;

}

ローカルURLへアクセス

URLへアクセス(ドキュメントルート設定済を想定)

http://localhost/

管理者情報、サイト名などを登録

管理画面設定

プラグイン設定

プラグイン関連をテンプレートから持ってくる&アップデート

投稿のカテゴリ設定

  • 未分類をお知らせ(information,topicsなど)に変更

固定ページ作成

  • トップページ(/top/)
  • お知らせページ(/news/)
  • お問い合わせページ(/contact/)

設定

一般設定

  • ドキュメントルート位置、キャッチフレーズ、Dateのフォーマット

投稿設定

特になし

表示設定

  • フロントページを[固定ページ] > トップページを選択
  • 投稿ページを、固定ページのお知らせページ

ディスカッション

とくになし

メディア

サイズをアップ 300,600,1024に

パーマリンク設定

カスタム構造

/%category%/%postname%

Akismet

とくになし

I Order Terms

とりあえずすべて可能に。

バックアップ設定

BackWPupにて
– job作成 設定はブログに合わせて

テーマ設定

  • style.cssのテーマ概要を変更
  • 管理画面から有効化
  • 不要なテーマを削除(選択すると右下に削除のテキストリンクが出る。)

いろいろ図書館で借りて読んだ本のメモ。

いろいろ図書館で借りて読んだ本のメモ。

だいぶ久しぶりにちかくの図書館へ近年の書籍もふえていたのでいろいろ借りて読んでみました。
とはいっても、時間もあれなので、かなりざっくりと目を通して気になったところをメモ。

詳解wordpress

DBの中身まで理解したい人や、プラグイン、ウィジェット、テーマなどをオリジナルで開発したい人は読んでおくと良さげ、すでに開発などしている人はソースコードなど読んだ方がはやいかと。
DBはテーブルごと細かく解説されていて、プラグインの開発サンプルなども解説あります。
※すこし発行が古いのでHHVMなど紹介あるが、いまとなってはPHP7でいいかもとかはある

ハイパフォーマンス ブラウザネットワーキング

前半はTCPの基礎などネットワークの基礎的なところから、後半はコンテンツ(HTTP)側のXHR,WebSocketなどコンテンツ部分まで幅広くカバー、インフラエンジニア〜フロントエンドエンジニアな人にはおすすめ、時間があれば購入してしっかりよみたい。
オンラインゲームの通信とか、チャットとか、配信サービスとかいろいろと礎になりそう。

面白かったのは以下のユーザの知覚。
このブログも5秒くらい、どうにか安く1000msくらいにしたいな。

  • メモ : 時間とユーザの知覚
遅延 ユーザの知覚
0–100ms 瞬時
100–300ms わずかな知覚可能な遅延
300–1000ms マシンが動作している
1000ms+ メンタルコンテクストスイッチが発生する
10000ms タスクを破棄

nginxでのワードプレスのパーマリンク設定

nginxでのワードプレスのパーマリンク設定

すこしはまったのでnginxでのwordpressのパーマリンク設定のメモ

ポイントとしては、“try_files $uri @wordpress;”と try_filesディクレティブでURLが見つからないファイルはすべて location @wordpress { ~ } ブロックに回す。
@wordpress { ~ } ブロックでは、リクエストのURIにかかわらずすべて index.phpを実行する設定とする。
以下設定全部。

server {
    #ポート80番をlisten
    listen       80;
    #マルチドメインのサーバー名
    server_name  cycling-course.okinawa;
    #ドキュメントルート
    root   /usr/share/nginx/html/cycling-course.okinawa;
    # ApacheでいうDirectoryIndex
    index  index.php index.html;
    # ロケーションドメイン/に適用ブロック
    location / {
        # 左側からマッチするかチェックしていく 
        # http://cycling-course.okinawa/2017/10/ だったら、$urlは、2017/10/
        # チェック1 '2017/10/' があるか
        # チェック2 '2017/10//' があるか
        # 適合がないので、@wordpressブロックを適用する
        try_files $uri $uri/ @wordpress;
    }
    # 拡張子が .phpにマッチした場合に適用されるブロック
    location ~ .php$ {
        # 前のブロック同様にマッチしなければ @wordpressブロックを適用する指定
        try_files $uri @wordpress;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        # 先に include しておかないと次の$fastcgi_script_nameが無効になって
        include  fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
    # ファイルがマッチしない場合に適用する@wordpressブロック
    location @wordpress {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        include  fastcgi_params;
        # ※ここがミソ。リクエストに関係なくすべて、index.phpを実行する
        fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
    }
}

参考サイト

http://qiita.com/egnr-in–6matroom/items/a08f4851bf16d0131e60

http://qiita.com/kotarella1110/items/f1ad0bb40b84567cea66