Я работаю над небольшим плагином, который при активации создает страницу темы, а затем функция устанавливает эту страницу как опубликованную, это код, который у меня есть для публикации:
// 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, а другую в черновике.
Когда вы обновляете параметр с идентификатором страницы при создании, вы используете параметр с именем,
mjj_smart_ads_page
а когда вы пытаетесь изменить статус, вы все вызываете параметр с именемmjj_old_smart_ads_page
, это опечатка? в этом проблема? если нет то чтоmjj_old_smart_ads_page
?Привет, Bainternet, спасибо, что нашли время опубликовать проблему/решение, мне удалось обойти это, однако система обмена стеками не позволит мне опубликовать решение кода в качестве ответа еще на 3 часа, но вкратце то, что я сделал, было найти идентификатор страницы по ее заголовку и таким образом обновить статус всего за 4 строки кода, когда я смогу опубликовать свой ответ, я также опубликую код, еще раз спасибо
Рад, что вы нашли решение
спасибо, это временное решение, хотя я чувствую, что если пользователь изменит заголовок сообщения, это может означать, что оно не работает, как только у меня будет плагин, работающий на 100%, мне придется искать способ, который покрывает эту возможность… потому что это должно произойти…ржу не могу
Я добавил ответ, который не зависит от названия.
Рад, что смог помочь.
Вы, конечно, помогли, все эти кусочки кода — куча помощи, и не говоря уже о большом понимании, я создал около 30 тем wp того или иного типа, но от тем переход к плагинам — это новая игра с мячом для меня., довольно захватывающе, в какой-то занудной манере…
Я публикую это как еще одно решение для вас, основанное на идентификаторе страницы.
Итак, когда у вас есть эта функция, вы можете использовать ее с идентификатором страницы, которую вы создали: