2022年10月06日

ワードプレスのデータベース構造

 wp_posts
 
 CREATE TABLE `wp_posts` (
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `post_author` bigint(20) unsigned NOT NULL DEFAULT '0',
  `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content` longtext COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_title` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_excerpt` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'publish',
  `comment_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'open',
  `ping_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'open',
  `post_password` varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `post_name` varchar(200) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `to_ping` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `pinged` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content_filtered` longtext COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
  `guid` varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `menu_order` int(11) NOT NULL DEFAULT '0',
  `post_type` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'post',
  `post_mime_type` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `comment_count` bigint(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `post_name` (`post_name`(191)),
  KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
  KEY `post_parent` (`post_parent`),
  KEY `post_author` (`post_author`)
) ENGINE=InnoDB AUTO_INCREMENT=74 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci |

wp_postmeta

CREATE TABLE `wp_postmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
`meta_value` longtext COLLATE utf8mb4_unicode_520_ci,
PRIMARY KEY (`meta_id`),
KEY `post_id` (`post_id`),
KEY `meta_key` (`meta_key`(191))
) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci |

記事本体(wp_posts)
post_status → 公開(publish) 下書き(draft) ゴミ箱(trash)
post_date → 登録日
post_type → 投稿タイプ post とか

投稿者 muuming : 12:16

2022年03月19日

wp フック順番

https://wemo.tech/2062

after_setup_theme
set_current_user
registered_post_type(複数回実行)
registered_taxonomy(複数回実行)
init
customize_register(カスタマイザープレビュー時のみ)
wp_loaded
parse_request
send_headers
parse_query(クエリの呼び出しによって複数回実行される。フロント側で最速のタイミングはこの辺だった。)
pre_get_posts(クエリの呼び出しによって複数回実行される。フロント側で最速のタイミングはこの辺だった。)
the_posts
wp
admin_bar_init
template_redirect
wp_enqueue_scripts
wp_print_scripts
wp_head
wp_footer
shutdown

投稿者 muuming : 07:24

2020年12月15日

uploadディレクトリにFTPなどで置いたファイルを登録

$file = (wp_upload_dir())["basedir"]."/lps/sawara.jpg";

//データの登録
$attachment = array(
 'post_mime_type' => mime_content_type($file), //1
 'post_title' => sanitize_file_name(file), //2
 'post_content' => '', //3
 'post_status' => 'inherit' //4
 );
$attach_id = wp_insert_attachment( $attachment, $file, 0 );
print $attach_id." としてアップ
"; //サムネイルやらその他情報の作成しそれを元にデータをアップデート $attach_data = wp_generate_attachment_metadata( $attach_id, $file ); wp_update_attachment_metadata( $attach_id, $attach_data );

投稿者 muuming : 08:00

2020年10月20日

wordpressのrest_apiでのログイン判定

if (! is_admin() )

では取れないっぽい。
wordpress rest api get current user あたりで検索

うまく動くものが出来たら追記する予定

投稿者 muuming : 14:26

2020年10月10日

ワードプレスのアイコンフォント

管理画面のアイコンってFont Awesome的なものだよなとおもってたが dashicons ていうらしい

一覧を紹介しているいいページがまだ見つかってないのでそれは必要な時探す。

とりあえず使い方は このあたり

css
font-family: "dashicons";
content: "\f127";


cssfileの読み込み
wp_enqueue_style('dashicons', get_stylesheet_uri(), array('dashicons'));

通常は管理画面では読み込まれてるだろうからcssだけかな

投稿者 muuming : 15:34

2020年10月06日

ワードプレスでのデータベース操作方法

https://one-ap-engineer.com/wpdb/

この図はわかりやすい!


wpdbの関数早見図.png

投稿者 muuming : 13:54

2020年10月05日

ワードプレス 有効・無効・アンインスコ時の処理をつける

https://blog.it.churaumi.tv/wordpress-plugin-register-activation-deactivation-uninstall-hook

/* 有効にした時に引数で指定したファンクションを実行 */

/* 停止した時に引数で指定したファンクションを実行 */

/* アンインストールした時に引数で指定したファンクションを実行 */

これはどう使うんだろう。以下が例です。


class PluginDeveloper
{
public function __construct()
{
/* 有効にした時に引数で指定したファンクションを実行 */
if (function_exists('register_activation_hook'))
{
register_activation_hook(__FILE__, array(&$this, 'activation'));
}
/* 停止した時に引数で指定したファンクションを実行 */
if (function_exists('register_deactivation_hook'))
{
register_deactivation_hook(__FILE__, array(&$this, 'deactivation'));
}
/* アンインストールした時に引数で指定したファンクションを実行 */
if (function_exists('register_uninstall_hook'))
{
register_uninstall_hook(__FILE__, 'PluginDeveloper_Uninstall');
}
}
function activation() {
/* 有効にした時の処理 */
}
function deactivation() {
/* 停止にした時の処理 */
}
}
function PluginDeveloper_Uninstall() {
/* アンインストールにした時の処理 */
}
?>

投稿者 muuming : 08:14

2020年09月28日

ワードプレスで外部からデータ取得

file_get_contentsでもいいんだが、なんかお作法あるようなので、正しいかわからないけどメモ

$result = wp_remote_get($url, $options);

https://wpdocs.osdn.jp/関数リファレンス/wp_remote_get

GETメソッドを使用してHTTPリクエストからの生の応答を取得します。

結果は、HTTPヘッダとコンテンツが含まれています。
※失敗時はWP_Errorが帰ってくる

HTTP POSTメソッドを使うには wp_remote_post() / enを参照ください。

デフォルトのパラメーター

$args = array(
'timeout' => 5,
'redirection' => 5,
'httpversion' => '1.0',
'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ),
'blocking' => true,
'headers' => array(),
'cookies' => array(),
'body' => null,
'compress' => false,
'decompress' => true,
'sslverify' => true,
'stream' => false,
'filename' => null
);

投稿者 muuming : 09:43

ワードプレスのキャッシュ

https://www.slideshare.net/katanyan/wordpress-58525699
によると

◆Wordpress Object cashe
◆Transientes API

2つある?違いは?

1、WordPress Object Cache URL:https://wpdocs.osdn.jp/クラスリファレンス/WP_Object_Cache
デフォルトでは、オブジェクトキャッシュは永続的なものではありません。これはつまり、データはメモリ上にのみ存在し、セッションの間を通してしか存在しない

処理内でのキャッシュって事かな。

単にデータを変数内にとっておけばいい気がするけど、たぶんワードプレスのお作法で書いたときにデータを引き出す側はキャッシュの有無とか気にせず書けるようになってるのかなぁ?こっちはとりあえず置いておこう。


2、Transientes API URL:https://wpdocs.osdn.jp/Transients_API

この API はキャッシュされるデータを一時的にデータベースへ保存するためのシンプルで標準化された方法を提供します。この方法ではデータに名前と有効期限を設定し、期限が来るとデータが削除されます。

ということでこれが私が思い浮かべるキャッシュ機構

---------------------
Transient を保存する
---------------------
set_transient( $transient, $value, $expiration );

$transient → (文字列) キャッシュされるデータにつけるユニークな識別子(長さ 45 文字以下)
$value → データ 勝手にシリアライズしてくれるのでそのままぶちこめ
$expiration → (整数) データを更新するまでの最大の秒数

---------------------
Transient を取得する
---------------------
get_transient( $transient );

---------------------
保存された Transient を削除する
---------------------
delete_transient( $transient );

--------------------------
データベースを操作して一時データ全て削除
--------------------------
DELETE FROM `wp_options` WHERE `option_name` LIKE ('%\_transient\_%')

投稿者 muuming : 05:56

2019年09月12日

ワードプレスのSSL化で無限ループちゃん

$_SERVER["HTTPS"] = "on";

で対応

投稿者 muuming : 08:52

2019年01月30日

wordpressお勉強

うーん 避けてたがやらないとけなくなった。

テーマの名前などの情報 style.cssの頭のコメントにライセンスやテーマ名などなど書いてある。他のライセンスOKなテーマをコピーしてからちょいちょいと必要部分変更するとこから始めるればなんとかなりそう。




■表示されるまでに使用しようとするファイルについて

個別投稿表示 個別投稿ページの表示に使用されるテンプレートファイル。
 single-{post_type}.php
 single.php
 singular.php
 index.php


固定ページ
 カスタムテンプレートファイル - ページ作成画面の「テンプレート」ドロップダウンメニューで選択したテンプレート名。get_page_templates()参照。
 page-{slug}.php - 固定ページのスラッグが recent-news ならば WordPress は page-recent-news.php を探す。
 page-{id}.php - 固定ページIDが 6 ならば WordPress は page-6.php を探す。
 page.php
 singular.php
 index.php


一覧ページ(カテゴリぺーじ) category-{slug}.php - カテゴリーのスラッグが news ならば WordPress は category-news.php を探す。
category-{id}.php - カテゴリー ID が 6 ならば WordPress は category-6.php を探す。
category.php
archive.php
index.php





デフォルトにある通常の「投稿」は投稿タイプpostのもの。
固定ページはpageというタイプ。 この投稿タイプは増やせる。

add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( // カスタム投稿タイプを定義するための関数
    'news', // カスタム投稿タイプ名
    array(
      'labels' => array(
        'name' => 'ニュース', //ダッシュボードに表示される名前
        'add_new_item' => 'ニュースを新規追加', // 新規追加画面に表示される名前
        'edit_item' => 'ニュースの編集', // 編集画面に表示される名前
      ),
      'public' => true, // ダッシュボードに表示するか否か
      'hierarchical' => true, // 階層型にするか否か
      'has_archive' => true, // アーカイブ(一覧表示機能)を持つか否か
      'supports' => array( // カスタム投稿ページに表示される項目
        'title', // タイトル ***カスタムフィールドだけにしたい場合は消しちゃう***
        //'editor', // 本文 ***カスタムフィールドだけにしたい場合は消しちゃう***
        'custom-fields', // カスタムフィールド
        //'thumbnail', // アイキャッチ画像 ***カスタムフィールドだけにしたい場合は消しちゃう***
      ),
      'menu_position' => 5, // ダッシュボードで投稿の下に表示
      'rewrite' => array('with_front' => true), // パーマリンクの編集(newsの前の階層URLを消して表示)
    )
  );
}

んで 登録項目(カスタム投稿)のカスタマイズは、自力でごりごりやるよりもアドオンを使います。
Advanced Custom Fieldsてのが定番なのかな? 

詳細は理解していないけど、どのカスタム投稿パターンに適応するのか、そしてなんの登録項目を管理画面からちょいちょいと登録できる。


固定ページはパーマリンクがあるのでそれでリンクできる。
一覧ページはどう作ったら良いのか・・・・

カスタムポストの一覧は通常は'has_archive'をtrueにしていればカスタム投稿タイプ名がURLの名前になる。
http://example.com/news/ カスタムタイプがnewsの場合

しかし、以下でさらにURL書き換えも可能

/* 投稿アーカイブページの作成 */
function post_has_archive( $args, $post_type ) {

	if ( 'post' == $post_type ) {
		$args['rewrite'] = true;
		$args['has_archive'] = 'blogs'; //任意のスラッグ名
	}
	return $args;

}
add_filter( 'register_post_type_args', 'post_has_archive', 10, 2 );
このあたりは設定をかえるだけでは変わらない。
これを記述後、管理画面の「設定」→「パーマリンク設定」→「変更を保存」をクリック



投稿後のデータの引っ張り出し方

とりあえずは詳細ページの場合 <?PHP print post_custom("カスタムフィールド名");?>でデータとれます


関係ないページで投稿一覧がほしい場合

$args = array('post_type' => 'news',  //カスタム投稿タイプ名 
	'orderby' => 'date', 
	'order' => 'DESC', 
	posts_per_page' => 10  //取得件数
);
$post_list = get_posts($args);
print_r($post_list);
foreach($post_list as $t_key => $t_dat){
	print_r(get_post_custom($t_dat->ID));
}

投稿者 muuming : 17:02