martinjj
  • 0
Гуру

Установить черновик страницы при деактивации плагина

  • 0

Я работаю над небольшим плагином, который при активации создает страницу темы, а затем функция устанавливает эту страницу как опубликованную, это код, который у меня есть для публикации:

// function that creates the new ads page on plugin install // 
function mjj_create_page ()
{
// Create new page object
$ads_page = get_option('mjj_smart_ads_page');

$ads_new_page = array(
    'post_title' => 'Smart Ads',
    'post_content' => '',
    'post_status' => 'publish',
    'post_type' => 'page'  
 );   
// Insert the page into the database
$ads_page = wp_insert_post( $ads_new_page );
update_option('mjj_smart_ads_page', $ads_page);

// now lets give this new page a groovy template
$ads_page_data = get_page_by_title('Smart Ads');
$ads_page_id = $ads_page_data->ID;
update_post_meta($ads_page_id, '_wp_page_template','tpl-smart-ads.php');

}

не знаю, является ли его семантически идеальным wp, но, похоже, он работает нормально и делает то, что мне нужно, однако теперь я пытаюсь установить функцию, которая будет деактивировать плагин, чтобы установить для этой созданной страницы статус черновика, чтобы она не отображалась в меню, но это просто похоже, не хочет играть, вот с чем я работаю:

// function that drafts smart ads page on plugin deactivate // 
function mjj_unpublish_page ()
{
$old_ads_page = get_option('mjj_old_smart_ads_page'); 

$ads_old_page = array(
    'post_title' => 'Smart Ads',
    'post_content' => '',
    'post_status' => 'draft',
    'post_type' => 'page'  
  );
     // Insert the page into the database
$old_ads_page = wp_update_post( $ads_old_page );
update_option('mjj_old_smart_ads_page', $old_ads_page); 
}

а ниже мои крючки

    // create the page to get the info for selling ads and posting ads
    register_activation_hook($file, array(&$this, 'mjj_create_page'));
    //while in this block i will also add the deactivate function to unpublish the created page
register_deactivation_hook($file, array(&$this, 'mjj_unpublish_page'));

как вы можете видеть, я думаю, что настройка для черновика будет включать использование wp_update_post, но, похоже, он не работает правильно при деактивации, в итоге я опубликовал одну страницу Smart Ads, а другую в черновике.

Share
  1. Когда вы обновляете параметр с идентификатором страницы при создании, вы используете параметр с именем, mjj_smart_ads_page а когда вы пытаетесь изменить статус, вы все вызываете параметр с именем mjj_old_smart_ads_page, это опечатка? в этом проблема? если нет то что mjj_old_smart_ads_page ?

    • 0
  2. Я публикую это как еще одно решение для вас, основанное на идентификаторе страницы.

    /*
    $post_id - The ID of the post you'd like to change.
    $status -  The post status publish|pending|draft|private|static|object|attachment|inherit|future|trash.
    */
    function change_post_status($post_id,$status){
        $current_post = get_post( $post_id, 'ARRAY_A' );
        $current_post['post_status'] = $status;
        return wp_update_post($current_post);
    }
    

    Итак, когда у вас есть эта функция, вы можете использовать ее с идентификатором страницы, которую вы создали:

    $ads_page = get_option('mjj_smart_ads_page');
    $old_ads_page = change_post_status($ads_page,'draft');
    update_option('mjj_old_smart_ads_page', $old_ads_page); 
    
    • 0

Оставить ответ

You must login to add an answer.