masaruさん、こんにちは。
いくつかの方法が考えられます。
ただし、検証はしていないので、その辺は容赦ください。
該当部分にボタンを設けるのであれば、javascriptでnameがss、sizeが2、maxlengthが2のinput要素の後に、必要なhtmlソースを差し込むのが変更点が少なく、つまり他のプラグインと競合しにくい方法になるかと思います。(本当はidで特定したいところですが、直前に同名のidがあるんですよね。。。)
PHPで変更することも出来ますが、変更範囲が大きくなるため(「公開」ボックスをまるごと差し替える)他のプラグインと競合する可能性が大きくなってしまい、あまり現実的とは言えません。
その他、この機能をどの程度利用するつもりなのかで、他の実装方法も考えられます。
公開日時のトグルを毎度開くのは面倒なので、wp_insert_post_dataというフック(wp-includes/post.php line1456)で書き込むデータをフィルタリングする手もあります。
ユーザーに更新の選択肢を与えるのであれば、公開ボタンのすぐ上にpost_submitbox_startというフックがありますので、ここにチェックボックスを設けて、チェックが入っていれば、上記のフィルタリングを行うようにすれば良いかと思います。
多少端折った説明なので、分かりにくいかもしれませんが、がんばってみてください。
jim912さん こんばんわ。
レスありがとうございます。
私のスキルだとpost_submitbox_startをフックにして実行させるくらいまで
しかできませんでした^^;
本当は・・・
javascriptでnameがss、sizeが2、maxlengthが2のinput要素の後に、必要なhtmlソースを差し込むのが変更点が少なく、つまり他のプラグインと競合しにくい方法になるかと思います。
ができれば一番綺麗に収まるのですけどね^^;
ぐぅ~ぐる先生に教えて貰いながら時間を見つけて頑張ってみます。
admin-scripts.js を作成して以下を記述。
jQuery(document).ready( function($) {
if ( $('#submitdiv').length ) {
stamp = $('#timestamp').html();
$('#timestampdiv')
.before('<p><a class="update-timestamp hide-if-no-js button" href="#update_timestamp">最新の日時に置き換え</a></p>')
.prev().click(function(){
date = new Date();
var aa = date.getFullYear(), mm = date.getMonth() + 1, jj = date.getDate(), hh = date.getHours(), mn = date.getMinutes();
$('#aa').val(aa);
$('#mm').val(mm);
$('#jj').val(jj);
$('#hh').val(hh);
$('#mn').val(mn);
$('#timestamp').html(
postL10n.publishOnPast + ' <b>' +
aa + '年' +
mm + '月' +
jj + '日 @ ' +
hh + ':' +
mn + '</b> '
);
return false;
});
}
});
functions.php に以下を記述。
function my_scripts(){
wp_enqueue_script('my-admin-script', get_bloginfo('template_url') . '/admin-scripts.js', array('jquery'), false, true);
}
add_action('admin_print_scripts', 'my_scripts');
でそれらしいボタンの追加ができます。
「投稿編集」と「ページを編集」の時だけタイムスタンプを最新に更新
するだけなら以下を functions.php に追加するだけでも良さそうです。
function my_insert_post_data($data, $postarr){
if($data['post_type'] != 'post' && $data['post_type'] != 'page'){
$data['post_modified'] = $data['post_date'];
$data['post_modified_gmt'] = $data['post_date_gmt'];
}
return $data;
}
add_filter('wp_insert_post_data', 'my_insert_post_data', 99, 2);
kzさん
コードありがとうございます。
フォーラムを閉じるの忘れてました^^;
プラグインで実装していたのですが、OKボタンを押さないと確定しなかったので
こちらのコードに乗り換えました。
ありがとうございます。
再OPEN&わかりにくい説明ですみません。
kzさんのコードを使用していましたが困ったことがおきはじめました^^;
1度公開済みのものを投稿編集にて内容修正し現在時間を更新して保存すると
その記事が消えてしまいます。
ただ、DB上にはデータは残っているみたいです。
管理画面の投稿編集一覧とHPのTOP(index.php)に表示されなくなります。
URLを直で打てば表示されます。
RSSやATOMの一覧からも消えます。
パーマリンクを/%postname%.htmlとしていて記事タイトルはYYYY/MM/DDとしています。
例:
記事タイトル:2010/02/03
内容:ほげほげ
URL:http://exsample.com/wp/20100203.html
で新規公開します。
上記で編集した記事の内容を
内容:ほげほげhogehoge
と変更して、最新の日時に置き換えをクリックして保存。
この状態で管理画面の投稿編集一覧やHPのTOPなどから消えます。
しかしhttp://exsample.com/wp/20100203.htmlで直アクセスすると表示されます。
Apacheのエラーログを眺めてみましたが何も出力されませんでした。
また、消えた状態で同じタイトル、内容の記事を公開するとURLは変わりますが
管理画面の投稿編集一覧やHPのTOPなどに正常に表示されます。
#URLが20100203-1.htmlとかになる
手打ちで日時を置き換えた場合、消えません。
以前使っていたtimestamp-setプラグインに戻すと問題がないです。
コードの問題か環境依存の問題かが不明ですが正常に動作させる方法はありますでしょうか?
その記事が消えて
公開月が1月になってるだけだったら、以下に差し替えてください。
jQuery(document).ready( function($) {
if ( $('#submitdiv').length ) {
stamp = $('#timestamp').html();
$('#timestampdiv')
.before('<p><a class="update-timestamp hide-if-no-js button" href="#update_timestamp">最新の日時に置き換え</a></p>')
.prev().click(function(){
date = new Date();
var aa = date.getFullYear(), mm = date.getMonth() + 1, jj = date.getDate(), hh = date.getHours(), mn = date.getMinutes();
mm = '' + mm;
if(mm.length == 1) mm = '0' + mm;
$('#aa').val(aa);
$('#mm').val(mm);
$('#jj').val(jj);
$('#hh').val(hh);
$('#mn').val(mn);
$('#timestamp').html(
postL10n.publishOnPast + ' <b>' +
aa + '年' +
mm + '月' +
jj + '日 @ ' +
hh + ':' +
mn + '</b> '
);
return false;
});
}
});
ひと桁の月は ’01’ ’02’ のように ‘0’ つけないとイカンようでした。
kzさん
ご指摘のとおり、公開月が1月公開になってました^^;
コードを差替えたら問題なく現在日時で保存できました。
ありがとうございます。