サポート » 使い方全般 » 投稿スラッグを日付にしたい

  • 解決済 kurosquare

    (@kurosquare)


    お世話になっております。
    新規記事を投稿するとき、スラッグの初期値を日付(例えば「20110401」)にしたいのです。

    add_filter('wp_insert_post_data', 'append_slug', 10,3);
    function append_slug($data) {
        if (!strstr($data['post_status']=='auto-draft' && empty($data['post_name'])
            $data['post_name'] = date_i18n('Ymd');
        return $data;
    }

    のように気楽に考えていたのですが、自動保存への対応がいまいちで、「20110401」というスラッグの記事を編集し直すと「20110401-2」になってしまいます。

    希望する動作:
    自動・手動にかかわらず、「新規に記事を作る」かつ「スラッグを指定しない」場合にはスラッグを日付にする。ただし、すでに同じ日付の記事がある場合は「日付-2」にする。

    自動保存ルーチンかどうかチェックすればいいのかと考えて
    defined('DOING_AUTOSAVE') && DOING_AUTOSAVE
    を使ってみるも、なかなかうまくいきません。いい方法がありましたら助言をいただければと思います。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • jqueryで良ければ、

    add_action('admin_head-post-new.php','set_slug_date');
    function set_slug_date() {?>
    <script language="javascript">
    //<![CDATA[
    jQuery(document).ready(function($){
        $('input#post_name').val("<?php echo date('Ymd');?>");
    });
    //]]>
    </script>
    <?php }

    post-newを開いた時に、Slugをdate(‘Ymd’);にします。(タイムゾーンは適宜調節してください)

    個人的にはデータベースへ入れるところはいじりたくないので、投稿のカスタマイズはjavascriptを使うことが多いです。

    おお天才!ありがとうございます。アドバイスいただけて、とても嬉しいです。

    タイムゾーンは適宜調節してください

    なるほど、date_i18n('Ymd')を使ってみますね。

    add_action('admin_head-post-new.php','set_slug_date');
    function set_slug_date() {?>
    <script type="text/javascript">
    //<![CDATA[
    jQuery(function($){$('#post_name').val("<?php echo date_i18n('Ymd');?>");});
    //]]>
    </script>
    <?php }

    という感じにしてみました。

    蛇足ですがKtaiEntryでの投稿にはフィルターかけるだけで良さそうです。

    add_filter('ke_post_name','ke_another_postname');
    function ke_another_postname($post_name){
    	return date_i18n('Ymd');
    }

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「投稿スラッグを日付にしたい」には新たに返信することはできません。