web-dev-qa-db-ja.com

投稿日に基づいて投稿のカテゴリを変更するためのプラグイン?

その投稿が存在していた期間に基づいて投稿のカテゴリを変更するWordpressのためのプラグインはありますか?

私は他のWordpressプラグインを見たことがありますが、 "simple pie"と呼ばれるライブラリを使ってwp-blogの時限タスクを管理しています。

2
leeand00

プラグインを知りませんが、wp_schedule_single_event関数を使うことができます。

まず、値を取るメタボックスを作成します。削除にかかる時間と、機能から削除されたときにどのカテゴリに設定するのかを指定します。

 /* hook meta box */
add_action("admin_init", "admin_init");

/* hook meta box function */
function admin_init(){
    add_meta_box("Featured Removal", "Featured Removal", "Featured_Removal_options", "post", "normal", "high");
}

/* display meta box */
function Featured_Removal_options() {
    global $post;
    $custom = get_post_custom($post->ID);
    echo '<input type="hidden" name="wp_meta_box_nonce" value="', wp_create_nonce('Featured Removal'), '" />';
    <?
    <table border=0>
    <tr>
        <th style="width:20%"><label for="Remove_after">Remove From Featured After:</label></th>
        <td><input type="text" name="Remove_after" id="Remove_after" value="<?php $custom['Remove_after'] ? $custom['Remove_after'] : ''; ?>"/><br/>
        Enter time in Seconds Ex: 1 Hour = 3600 Seconds , 1 Day = 86400 Seconds.
        </td>
    </tr>
    <tr>
        <th style="width:20%"><label for="Remove_after_to_cat">Remove From Featured To Category:</label></th>
        <td><input type="text" name="Remove_after_to_cat" id="Remove_after_to_cat" value="<?php $custom['Remove_after_to_cat'] ? $custom['Remove_after_to_cat'] : ''; ?>"/><br/>
        Enter the category id of the category you want to remove the post after the time has passed. if more then one separate by commas Ex: 12,13,24
        </td>
    </tr>
    </table>
<?php }

/* save meta box hook*/
add_action('save_post', 'save_Featured_Removal_options');

/* save meta box function*/
function save_Featured_Removal_options($post_id) {
    if (!wp_verify_nonce($_POST['wp_meta_box_nonce'], "Featured Removal")) {
        return $post_id;
    }
    // check autosave
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return $post_id;
    }
    If (isset($_POST['Remove_after']) && isset($_POST['Remove_after_to_cat'])){
        //cerate scheduled event
        $time = time() + $_POST['Remove_after'];
        wp_schedule_single_event($time, 'Clean_my_featured',$post_id);
        //save meta data
        update_post_meta($post_id, 'Remove_after', $_POST['Remove_after']);
        update_post_meta($post_id, 'Remove_after_to_cat', $_POST['Remove_after_to_cat']);
    }    
}

ユーザーが削除の時間と新しいカテゴリのカテゴリIDの両方を入力した場合は、メタボックスの保存機能を監視します。スケジュールイベントをwp_schedule_single_eventで設定しますそしてそれを "Clean_my_featured"にフックします。

そのため、そのフックに対するアクションと削除自体に対する関数を追加するだけです。

 /* hook removal event function */
    add_action('Clean_my_featured','remove_post_from_featured');

// the function that removes a post form a category and sets a new one
function remove_post_from_featured($post_id) {
    $cats = get_post_meta($post_id, 'Remove_after_to_cat', true);
    wp_set_post_terms( $post_ID, $cats, 'category');
}

これでうまくいくかどうかはわかりませんが、すべてをプラグインファイルまたはテーマのfunctions.phpファイルにコピーするだけでうまくいきます。

そうでなければ私に知らせてください。

2
Bainternet