サポート » プラグイン » 管理画面の公開日時の下にオリジナルのボタンを追加したい

  • 解決済 masaru

    (@masaru)


    プラグインは初挑戦です。

    「投稿編集」と「ページを編集」の時だけタイムスタンプを最新に更新したいので
    TimeStamp Setterを参考にして【timestamp-set】プラグインを作成してます。
    (TimeStamp SetterだとスクリプトErrorとかもでたので)

    「投稿編集」と「ページを編集」の時だけ追加は実現できたのですが、
    管理画面の公開日時の下に「最新の日時に置き換え」というボタンを追加して
    押すと公開日時が押した時間にしたいのですが、ボタンの配置で行き詰まりました。

    TimeStamp Setterではadd_action( ‘admin_footer’, ‘timestamp_setter’ );
    でアクション用フックにadmin_footerを使っているみたいですが、WP2.7だと管理画面の一番下に来てしまいます。

    とりあえず動作確認で・・・
    add_action( ‘timestamp’, ‘timestamp_set’ );
    としてプラグインを有効化
    /wp-admin/includes以下のtemplate.phpを
    <input type=”hidden” id=”ss” name=”ss” value=”<?php echo $ss ?>” size=”2″ maxlength=”2″ />
    <?php do_action( ‘timestamp’ ); ?>
    とすると意図した場所にボタンが出て動作するのですが・・・
    コアファイルをいぢらなくても同じ事ができるのでしょうか?

    お知恵をお貸しください><;

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • モデレーター jim912

    (@jim912)

    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というフックがありますので、ここにチェックボックスを設けて、チェックが入っていれば、上記のフィルタリングを行うようにすれば良いかと思います。

    多少端折った説明なので、分かりにくいかもしれませんが、がんばってみてください。

    トピック投稿者 masaru

    (@masaru)

    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);

    トピック投稿者 masaru

    (@masaru)

    kzさん

    コードありがとうございます。
    フォーラムを閉じるの忘れてました^^;
    プラグインで実装していたのですが、OKボタンを押さないと確定しなかったので
    こちらのコードに乗り換えました。

    ありがとうございます。

    トピック投稿者 masaru

    (@masaru)

    再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’ つけないとイカンようでした。

    トピック投稿者 masaru

    (@masaru)

    kzさん

    ご指摘のとおり、公開月が1月公開になってました^^;
    コードを差替えたら問題なく現在日時で保存できました。
    ありがとうございます。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「管理画面の公開日時の下にオリジナルのボタンを追加したい」には新たに返信することはできません。