wordpressで同一サーバー内の別データべースに接続してデータを取得、出力させる

同一サーバー内の別データベースに接続してデータをもってくる方法

$db = mysql_connect("localhost", "root", "");
mysql_select_db("test");
$sql = "SELECT * FROM  `テーブル名` WHERE  `ID` = 1" ;
$stm = mysql_query($sql);
 $rec = mysql_fetch_array($stm) ;
echo $rec["3"]; 配列の中から出力

mysql_close($db);

利用法

「test」データベース内にあるテーブルのデータをwordpress内のデータと紐づけておけば、
wordpressのカテゴリースラッグが○○だったら、「test」データベースの中の××の情報を出力する。
とかができるはず。

あとはこれをテーマの中のindex.php内に直接書くのではなく、functions.php内に書いておけば良い。

wordpress ページ送りが正常に動かない(ページ数が増えている)

プラグインのPageNaviやプラグインを使わずにページ送りを実装する方法が確立されているが、「本来の記事数以上のページ数が表示される」というエラーに出くわしたので解決方法を書いておく

こんなエラー

本来はとっても記事数が少ないのに16ページ目まで増えている
f:id:ozzwar:20130322180129p:plain

解決方法

pagedの設定とかかなと思い色々書いて見たがだめだった。

query_post周りのエラーの時に管理画面の表示設定の「1ページに表示する最大投稿数」を1件にしっぱなしだったのを思い出し、
f:id:ozzwar:20130322180408p:plain

とりあえず5件に変更してみた
f:id:ozzwar:20130322180422p:plain


すると治っていた。
f:id:ozzwar:20130322180453p:plain



ページ送りはこの部分から情報を持ってきているから、正常に動かなかったのかな

wordpress URLのクエリを取得して 記事一覧の内容をソート

カスタムフィールドに金額などを入力し、カテゴリーページでそれを昇順、降順でソートしたい。


試しにカテゴリーページに以下のような条件分岐とループを記述。
URLの「order」部分を取得して分岐させた。

<?php if (($_GET['order']) =='DESC') :?>

<?php
// DESC
query_posts('meta_key=price&orderby=meta_value_num&order=DESC&posts_per_page =20');
if(have_posts()) :
  while(have_posts()) :
    the_post(); ?>
    
<p><a href="<?php the_permalink();?>">a<?php the_title(); ?></a></p>

<?php  endwhile;
endif;?>

<?php else : ?>
// DESC以外
<?php
query_posts('meta_key=price&orderby=meta_value_num&order=ASC&posts_per_page =20');
if(have_posts()) :
  while(have_posts()) :
    the_post(); ?>
    
<p><a href="<?php the_permalink();?>"><?php the_title(); ?></a></p>

<?php  endwhile;
endif;?>

<?php endif; ?>


あとは以下のようなのURLをサイドメニュー等に入れておけば特定のカテゴリーで昇順、降順の記事一覧が作れる。

URLで

  • /category/?meta_key=price&orderby=meta_value_num&order=DESC
    • 降順
  • /category/?meta_key=price&orderby=meta_value_num&order=ASC
    • 昇順


Graham Central Station - Pow - YouTube

Libre Officeで「ウインドウを復元」ダイアログが消えない時の対処法

Zappa
画像は関係なし。


Libre Officeで「ウインドウを復元」ダイアログ(英語だと「Restore Windows」)が出てせっかく作ったエクセルファイルが開かない問題が発生。。。

こいつは困ったと調べていた時に以下の解決方法を発見!

  1. /Users/○○/Library/Saved Application Stateフォルダを開く
  2. org.libreoffiece.script.savedStateフォルダを削除


これだけ。


いやー良かった。

特定のカスタムフィールドを持つ記事を一覧で表示させる

f:id:ozzwar:20130307141400j:plain
WordpressのCustom Field Templateを使ってカスタムフィールドに値を入れたとき、
ある値を含む記事を一覧で表示させたくなった。(画像は関係なし!)

ゴール

ブログ内に以下の様な記事があるとする。

  • 記事A
    • カテゴリー:new
    • key:music
      • value:metal
  • 記事B
    • カテゴリー:new
    • key:music
      • value:punk
  • 記事C
    • カテゴリー:old
    • key:music
      • value:metal
  • 記事D
    • カテゴリー:old
    • key:music
      • カスタムフィールド:punk


...


ゴールとしてはサイドメニューに
===

  • カテゴリーnew
    • metal
    • punk
  • カテゴリーold
    • metal
    • punk

===
の様にリンクを張り、記事一覧ページ(category.php)にリンクさせたい。
ちなみに「サブカテゴリーにすればいいじゃない。」という声もあるけど、あえて今回はこれを実装する。

1.該当するカテゴリー独自のテンプレートファイルを作成する

まずカテゴリー1の記事が一覧で表示されるカテゴリーのテンプレートファイルを作成。

category-new.php

の様にスラッグやIDを追加してあげればOK

2.URLのクエリを取得して応じて記事一覧を表示

下記の様なURLを作り、URLの?以降のクエリを「$_GET」に格納して、それをもとにkeyやvalueを出力している。
$_GETをquery_postsに渡してあげる事で、metalの記事一覧表示できるようにする

hogehoge.com/new/?key=music&value=metal

このURLをサイドメニューに張ってあげる。
category-new.phpの内容は以下。(cat=○を入れるのを忘れずに)

<?php
get_header();
?>
<?php
query_posts('cat=○&posts_per_page=10&meta_key=' . $_GET['key'] . '&meta_value=' . $_GET['value']);
if(have_posts()) :
  while(have_posts()) :
    the_post(); ?>
<p><a href="<?php the_permalink();?>"><?php the_title(); ?></a></p>
<?php  endwhile;
endif;
wp_reset_query();
get_footer();
?>


ただ、この方法を書いたら、カテゴリー2の「key:music、value:metal」も一緒に出力されてしまったためquery_postsにカテゴリーを指定した。


この方法があれば、色々な絞り込みが出来るようになる。


お問い合わせフォームの内容を変更できないようにする(readonly属性を追加)wordress contact Form 7 

以下の記事を参考にcontact form7でお問い合わせフォームを実装し、記事からお問い合わせページへ任意の内容を引き継ぐ事ができた。


ただ、これだと引き継いだ情報を編集する事ができてしまうので、良くない。
f:id:ozzwar:20130219181739p:plain


そこでcontact form7を弄り、管理画面からreadonly属性を追加できるようにしてみた。

contact form7の編集

  • contact-form-7/modules/text.phpを開き以下の「// 追加」となっている部分を追加する
<?php
/**
** A base module for [text], [text*], [email], and [email*]
**/

/* Shortcode handler */

wpcf7_add_shortcode( 'text', 'wpcf7_text_shortcode_handler', true );
wpcf7_add_shortcode( 'text*', 'wpcf7_text_shortcode_handler', true );
wpcf7_add_shortcode( 'email', 'wpcf7_text_shortcode_handler', true );
wpcf7_add_shortcode( 'email*', 'wpcf7_text_shortcode_handler', true );

function wpcf7_text_shortcode_handler( $tag ) {
	if ( ! is_array( $tag ) )
		return '';

	$type = $tag['type'];
	$name = $tag['name'];
	$options = (array) $tag['options'];
	$values = (array) $tag['values'];

	if ( empty( $name ) )
		return '';

	$validation_error = wpcf7_get_validation_error( $name );

	$atts = $id_att = $size_att = $maxlength_att = '';
	$tabindex_att = $title_att = '';
	$readonly_att = '';   // 追加

	$class_att = wpcf7_form_controls_class( $type, 'wpcf7-text' );

	if ( 'email' == $type || 'email*' == $type )
		$class_att .= ' wpcf7-validates-as-email';

	if ( $validation_error )
		$class_att .= ' wpcf7-not-valid';

	foreach ( $options as $option ) {
		if ( preg_match( '%^id:([-0-9a-zA-Z_]+)$%', $option, $matches ) ) {
			$id_att = $matches[1];

		} elseif ( preg_match( '%^class:([-0-9a-zA-Z_]+)$%', $option, $matches ) ) {
			$class_att .= ' ' . $matches[1];

		} elseif ( preg_match( '%^([0-9]*)[/x]([0-9]*)$%', $option, $matches ) ) {
			$size_att = (int) $matches[1];
			$maxlength_att = (int) $matches[2];
		} elseif ( preg_match( '%^readonly$%', $option, $matches ) ) {
			$readonly_att = true;  // 追加

		} elseif ( preg_match( '%^tabindex:(¥d+)$%', $option, $matches ) ) {
			$tabindex_att = (int) $matches[1];

		}
	}

	$value = (string) reset( $values );

	if ( wpcf7_script_is() && preg_grep( '%^watermark$%', $options ) ) {
		$class_att .= ' wpcf7-use-title-as-watermark';
		$title_att .= sprintf( ' %s', $value );
		$value = '';

	} elseif ( empty( $value ) && is_user_logged_in() ) {
		$user = wp_get_current_user();

		$user_options = array(
			'default:user_login' => 'user_login',
			'default:user_email' => 'user_email',
			'default:user_url' => 'user_url',
			'default:user_first_name' => 'first_name',
			'default:user_last_name' => 'last_name',
			'default:user_nickname' => 'nickname',
			'default:user_display_name' => 'display_name' );

		foreach ( $user_options as $option => $prop ) {
			if ( preg_grep( '%^' . $option . '$%', $options ) ) {
				$value = $user->{$prop};
				break;
			}
		}
	}

	if ( wpcf7_is_posted() && isset( $_POST[$name] ) )
		$value = stripslashes_deep( $_POST[$name] );

	if ( $readonly_att )
		$atts .= ' readonly="readonly"';  // 追加

	if ( $id_att )
		$atts .= ' id="' . trim( $id_att ) . '"';

	if ( $class_att )
		$atts .= ' class="' . trim( $class_att ) . '"';

	if ( $size_att )
		$atts .= ' size="' . $size_att . '"';
	else
		$atts .= ' size="40"'; // default size

	if ( $maxlength_att )
		$atts .= ' maxlength="' . $maxlength_att . '"';

	if ( '' !== $tabindex_att )
		$atts .= sprintf( ' tabindex="%d"', $tabindex_att );

	if ( $title_att )
		$atts .= sprintf( ' title="%s"', trim( esc_attr( $title_att ) ) );

	$html = '<input type="text" name="' . $name . '" value="' . esc_attr( $value ) . '"' . $atts . ' />';

	$html = '<span class="wpcf7-form-control-wrap ' . $name . '">' . $html . $validation_error . '</span>';

	return $html;
}


〜略〜
29行目付近

$readonly_att = ''; // 追加

49行目付近

} elseif ( preg_match( '%^readonly$%', $option, $matches ) ) {
$readonly_att = true; // 追加

88行目

if ( $readonly_att )
$atts .= ' readonly="readonly"'; // 追加

これでフォームの管理画面でreadonlyを追加してあげればフォームにreadonly属性が付加される

contact form7の管理画面でフォームの項目にreadonly属性を追加

f:id:ozzwar:20130219183056p:plain


完成。
ただ、記事から情報を引き継ぐタイプのお問い合わせフォームと、プレーンな問い合わせフォームとを共有している場合はタグを分けるか、フォームを分けるかする必要がある。

iPhone5でバッテリーの減りが急激早くなった問題を解決

iphone5に変えてから数日。急に電池の減りが早くなってしまった。
朝100%の充電状態でほとんど使わないのに、お昼には10%くらいに。


「これは位置情報オフにするレベルじゃねぇぞ!!」と思って、色々調べていたら、
バッテリーの使用状況が

起動時間=使用時間

になってしまうという問題があることを発見。



先ほど、解決したので、メモ。

今回参考にしたのは以下。ありがとうございました。

  1. MMSの設定をオフにし、MMSアドレスを削除。iMessageをオフる。
  2. iPhoneをバックアップし、出荷状態に戻す(復元)
  3. 新しいiphoneとして起動し、再び1を行う。
  4. バックアップから復元


他に調べていたら、MySoftbankでMMSの設定うんぬん...と書いてある記事もあったが、やらなくても大丈夫でした。
バッテリーって死活問題なので、とりあえず直って一安心。