自作プラグインをWordPrss公式サイトへ登録申請したら拒否された話

2016年、初めてWordpressの公式サイトへ自作プラグイン(wp users guide)を登録しました。

これでインストールも更新も管理画面から簡単に行えるようになりましたのでユーザーさんにとっても便利になったと思います。

さて、タイトルの件についてですが、公式サイトに登録する手順を教えてくれるサイトを参考にreadme.txtを編集したり登録申請したりしたのですが、そういった解説サイトで抜けているのが「審査の結果、以下の理由で拒否されました」という内容。

私も初めて申請したので、今までWPのルールに則っていない記法を行っていた事を色々と知り、深く反省すると共に「やっぱりWordpressって便利に作られているなぁ」と改めて感嘆しました。

そこで私と同じように登録の申請で拒否された恥ずかしい人の為に、私が拒否された内容と解決策を記しておきます。参考になれば幸いです。

記事の中にある画像データをサムネイルで取得する関数

記事の中にある画像を直接取得する方法です。

get_children関数やthe_post_thumbnail関数が利用できない場面で使えると思います。
似たような関数を探せば同じようなものが出てくるのですが、どうも画像のURL属性しか取得していない感じですので「ちょっと違うなー」と思って作ってみました。

この関数の良いところは「attachment_id」が取得できる事です。
つまりidさえ取得できれば「wp-get_attachment_****」と付くものは使えるという事です。

[php]
/*
記事の中から指定された順番の画像データを取得
(imgタグのclass属性 wp-image-XX を利用)
$content : $post->post_content
$idx : 記事内の画像の表示順
*/
function get_post_image($content="", $idx=0) {
$thumb = "";
if(strlen($content) === 0) return $thumb;

// imgタグのwp-image-ID クラスを検索
preg_match_all(‘/wp-image-(\d+)/’, $content, $m);

if(count($m[1]) > 0) {
while(!isset($m[1][$idx])) {
$idx–;
if($idx < 0) break;
}
// $m[1][$idx] = attachment_id
if($idx > -1) $thumb = wp_get_attachment_image($m[1][$idx]);
}

return $thumb;
}

[/php]

functions.phpなんかに書いておけば良いかと思います。

呼び出すときは、

[php]
if(has_post_thumbnail()) :
$thumb = get_the_post_thumbnail();
else:
$thumb = get_post_image(get_the_content());
endif;
[/php]

でサムネイル画像が取得できます。

返り値

<img>タグ。取得できなかった場合は空文字です。

<img>タグは20行目のwp_get_attachment_imageで取得しているので、ここを色々変更すれば自由に加工できます。

オプション値について

$content
HTMLの記事です
$idx
記事に表示される画像の○番目を取得します。(※1番目の画像 = 0)
○番目の画像が見つからない場合は$idxを除算しながら取得します。

注意!!

この関数はwordpressがimgタグに自動で付加する「wp-image-XX」というclassから取得しています。
今後、wordpressの仕様が変更になると利用できなくなる可能性があるのでご注意ください。

WordPress 3.4 でのログイン画面のロゴについて

WordPress3.4にバージョンアップしたら、オリジナルロゴやリンク先URLの設定がおかしくなったので修正しました。

[php]
/* ログイン画面 */
add_action(‘login_head’, ‘custom_login’);
add_filter(‘login_headerurl’, ‘custom_wp_login_url’);
add_filter(‘login_headertitle’, ‘custom_wp_login_title’);

// ログイン画面全般
function custom_login() {
?>
<style type="text/css">
* { margin: 0 auto; }
.login h1 a {
background: transparent url(‘<?php bloginfo(‘template_directory’); ?>/images/login_logo.png’) left top no-repeat;
height: 62px;
width: 300px;
margin: auto;
}
#backtoblog { display: none; }
</style>
<?php
}

// タイトルのリンク先
function custom_wp_login_url() {
return get_bloginfo(‘url’);
}

// タイトル
function custom_wp_login_title() {
return ‘Powered by ‘ . get_option(‘blogname’);
}
[/php]

こんな感じのものをfunctions.phpに貼り付けて使用します。

ループ外で投稿者名を取得

今更書くまでもないですが、検索した時に出てこなかったので、一応自分用の備忘録として。

[php]
$author = get_userdata($post->post_author);
echo $author->display_name;
[/php]

the_author() や get_the_author() はWordPressループ中でないと効かないので、ループ外でユーザーデータを取得して表示する方法です。

場合によっては「global $post;」とかいるかも?です。

私はアーカイブページで表示したかったので、loop.phpに上記を書いてバッチリでした。

Custom Field Templateプラグインでの画像表示

「カスタムフィールドテンプレート」プラグインを利用すると予め入力項目が設定できるので便利です。

その設定の中で
[php]
[field1]
type = file
[/php]
という設定があります。

今回、ある案件で画像用として項目が欲しかったので上記の設定を行いました。
実際に画像をアップロードすると、[field1]の値には登録時のidが入るみたいなので利用する際は以下のようにすれば良いです。

[php]
// 画像のhtmlを出力
echo wp_get_attachment_image(post_custom(‘field1’));
[/php]

ただし、これだとalt属性やtitle属性にファイル名が入るので、そのあたりを自分で設定したい場合は以下のような関数をfunctions.phpなんかに書いておくと自由に設定できるかと。

[php]
function isp_get_attachment_image($attachment_id, $size=’thumbnail’, $title=”, $alt=”, $icon=false) {
$image = wp_get_attachment_image($attachment_id, $size, $icon);
if($title != ”) {
$image = preg_replace(array(‘/title=".+?"/’, ‘/alt=".+?"/’), array(‘title="’.$title.’"’, ‘alt="’.$title.’"’), $image);
}
if($alt != ”) {
$image = preg_replace(‘/alt=".*"/’, ‘alt="’.$alt.’"’, $image);
}

return $image;
}
[/php]

上記関数だとtitle属性のみがある場合はalt属性もtitleに合わせます。
使う場合は、

[php]
// フルサイズで画像の呼び出し
echo isp_get_attachment_image(post_custom(‘field1’), ‘full’, ‘タイトル属性’));

[/php]

$wpdbの機能をAjax等で利用する場合

Ajaxの利用等で通常のアクセスとは異なる方法で$wpdbを使いたい場合、以下のファイルを読み込めば利用できるようになります。

[php]
// $wpdbを利用する
$path = ‘WordPressのルートパス’;
include_once($path.’wp-config.php’);
include_once($path.’wp-load.php’);
[/php]

後は通常どおり「 global $wpdb; 」とグローバル宣言して使います。

どこかの英語サイトでこの方法を見つけたのですがどこだったか忘れました…けど感謝。

カテゴリーの並び替えにはカスタムメニューのデータを利用する

WordPress3.0から追加された「カスタムメニュー」の機能はとても使い易いです。

当ホームページでも既にヘッダー、サイドバー、フッターに組み込んでいます。(組み込むほどのメニューも無いのですが…)

さて、そんなカスタムメニューの機能を利用して作成されたメニューのデータを他で利用したい場合は、以下の関数で取得出来るみたいです。

wp_get_nav_menu_items(ID)

IDはメニューIDです。

これでカスタムメニューで設定した項目のデータが配列で取得できますので、後は下記のようにforやforeachを利用すればお望みのデータが取得出来ます。

[php]
<?php
$menu_items = wp_get_nav_menu_items(‘header-menu’);
foreach($menu_items as $menu) :
echo ‘[title] ‘ . $menu->title . ‘ (ID: ‘. $menu->object_id . ‘)<br />’;
endforeach;
?>
[/php]

調べるキッカケは「自分の好きな順序でカテゴリーを並べたカスタムメニューを利用したい」という要望でした。現状、プラグインか何かを導入する以外にカテゴリーを上手く並べ替えられないので、「わざわざプラグインを入れるのはしんどい」という人にとってはそれも有用な使い方かな、と思います。

編集画面から一覧に戻るリンクを追加するプラグイン(自作)

タイトルのままですが、記事(ページ)の編集画面に「一覧に戻る」リンクを追加するプラグインです。

ホームページをリニューアルする際、記事を複数にわたり変更する必要があったのですが、現状「一覧に戻る」というリンクが無い為、更新する度に「メニューから1ページ目に戻って該当するページに行って編集」という作業をしていました。

また記事が多いのでカテゴリーで絞込みしていても、記事(ページ)の更新後は上記と同じ方法しかありません。

もちろんブラウザの「戻る」でも元の一覧画面に戻れますが、更新後に戻っていくのは精神衛生上あまり好きになれなくて…。

というのが今回のプラグインを作成するきっかけでしょうか。

機能

  1. 記事(ページ)の編集画面で「一覧に戻る」リンクを追加します。
  2. 「一覧」とは直前まで見ていた記事(ページ)リストです。

スクリーンショット

「一覧に戻る」リンクの追加

ダウンロード

以下をダウンロードします。(ver 1.2)
DownLoad

このページへチップを贈る

インストール

  1. zipファイルをダウンロードします。
  2. zipファイルを展開後、フォルダごとプラグインフォルダに入れます。
  3. プラグインの管理画面から「Edit List Link」を有効化します。

使用方法

プラグインを有効化すれば自動で動きます。

その他注意事項

WindowsXPのIE8,FireFox,Chromeでは確認済みです。

このプラグインはcookieを利用しています。wordpressで使用するcookieに影響は無いと思いますが、もし何か不具合が出た場合は教えてください。

何かしらのトラブルが発生しても当社が責任を負うことは一切ありませんので、使用する場合は自己責任でお願いします。

更新履歴

  • 2018年3月15日 リンクの表示箇所を修正(ver 1.2)
  • 2012年6月15日 WP3.4に合わせて一部修正(ver 1.1)
  • 2010年8月25日 公開