我在找一种方法archived statut 在publication date.
首先,我添加archived statut 至平台(代码如下)。如果页面已发布,则会显示此状态。如果是草稿或待审查,则不显示状态。其他元素,如果我们将已发布的页面放在存档状态上。我们被重定向到列表页面,我们只能通过快速编辑来访问存档页面,以更改他的状态(我们不能直接访问页面)。
Add Archived page statut code
<?php
define( \'ARCHIVED_POST_STATUS_VERSION\', \'0.3.7\' );
define( \'ARCHIVED_POST_STATUS_PLUGIN\', plugin_basename( __FILE__ ) );
define( \'ARCHIVED_POST_STATUS_DIR\', plugin_dir_path( __FILE__ ) );
define( \'ARCHIVED_POST_STATUS_URL\', plugin_dir_url( __FILE__ ) );
define( \'ARCHIVED_POST_STATUS_LANG_PATH\', dirname( ARCHIVED_POST_STATUS_PLUGIN ) . \'/languages\' );
/**
* Load languages.
*
* @action plugins_loaded
*/
function aps_i18n() {
load_plugin_textdomain( \'archived-post-status\', false, ARCHIVED_POST_STATUS_LANG_PATH );
}
add_action( \'plugins_loaded\', \'aps_i18n\' );
/**
* Translations strings placeholder function.
*
* Translation strings that are not used elsewhere but
* Plugin Title and Description are helt here to be
* picked up by Poedit. Keep these in sync with the
* actual plugin\'s title and description.
*/
function aps_i18n_strings() {
__( \'Archived Post Status\', \'archived-post-status\' );
__( \'Allows posts and pages to be archived so you can unpublish content without having to trash it.\', \'archived-post-status\' );
}
/**
* Register a custom post status for Archived.
*
* @action init
*/
function aps_register_archive_post_status() {
$args = array(
\'label\' => __( \'Archived\', \'archived-post-status\' ),
\'public\' => (bool) apply_filters( \'aps_status_arg_public\', aps_current_user_can_view() ),
\'private\' => (bool) apply_filters( \'aps_status_arg_private\', true ),
\'exclude_from_search\' => (bool) apply_filters( \'aps_status_arg_exclude_from_search\', ! aps_current_user_can_view() ),
\'show_in_admin_all_list\' => (bool) apply_filters( \'aps_status_arg_show_in_admin_all_list\', aps_current_user_can_view() ),
\'show_in_admin_status_list\' => (bool) apply_filters( \'aps_status_arg_show_in_admin_status_list\', aps_current_user_can_view() ),
\'label_count\' => _n_noop( \'Archived <span class="count">(%s)</span>\', \'Archived <span class="count">(%s)</span>\', \'archived-post-status\' ),
);
register_post_status( \'archive\', $args );
}
add_action( \'init\', \'aps_register_archive_post_status\' );
/**
* Check if we are on the frontend.
*
* @filter aps_status_arg_exclude_from_search
*
* @return bool
*/
function aps_is_frontend() {
return ! is_admin();
}
add_filter( \'aps_status_arg_exclude_from_search\', \'aps_is_frontend\' );
/**
* Check if the current user can view Archived content.
*
* @return bool
*/
function aps_current_user_can_view() {
/**
* Default capability to grant ability to view Archived content.
*
* @since 0.3.0
*
* @return string
*/
$capability = (string) apply_filters( \'aps_default_read_capability\', \'read_private_posts\' );
return current_user_can( $capability );
}
/**
* Check if Archived content is read-only.
*
* @return bool
*/
function aps_is_read_only() {
/**
* Archived content is read-only by default.
*
* @since 0.3.5
*
* @return bool
*/
return (bool) apply_filters( \'aps_is_read_only\', true );
}
/**
* Filter Archived post titles on the frontend.
*
* @param string $title
* @param int $post_id (optional)
*
* @return string
*/
function aps_the_title( $title, $post_id = null ) {
$post = get_post( $post_id );
if (
! is_admin()
&&
isset( $post->post_status )
&&
\'archive\' === $post->post_status
) {
$title = sprintf( \'%s: %s\', __( \'Archived\', \'archived-post-status\' ), $title );
}
return $title;
}
add_filter( \'the_title\', \'aps_the_title\', 10, 2 );
/**
* Check if a post type should NOT be using the Archived status.
*
* @param string $post_type
*
* @return bool
*/
function aps_is_excluded_post_type( $post_type ) {
/**
* Prevent the Archived status from being used on these post types.
*
* @since 0.1.0
*
* @return array
*/
$excluded = (array) apply_filters( \'aps_excluded_post_types\', array( \'attachment\' ) );
return in_array( $post_type, $excluded );
}
/**
* Modify the DOM on post screens.
*
* @action admin_footer-post.php
*/
function aps_post_screen_js() {
global $post;
if ( aps_is_excluded_post_type( $post->post_type ) ) {
return;
}
if ( \'draft\' !== $post->post_status && \'pending\' !== $post->post_status ) {
?>
<script>
jQuery( document ).ready( function( $ ) {
$( \'#post_status\' ).append( \'<option value="archive"><?php esc_html_e( \'Archived\', \'archived-post-status\' ) ?></option>\' );
} );
</script>
<?php
}
if ( \'archive\' === $post->post_status ) {
?>
<script>
jQuery( document ).ready( function( $ ) {
$( \'#post-status-display\' ).text( \'<?php esc_html_e( \'Archived\', \'archived-post-status\' ) ?>\' );
} );
</script>
<?php
}
}
add_action( \'admin_footer-post.php\', \'aps_post_screen_js\' );
/**
* Modify the DOM on edit screens.
*
* @action admin_footer-edit.php
*/
function aps_edit_screen_js() {
global $typenow;
if ( aps_is_excluded_post_type( $typenow ) ) {
return;
}
?>
<script>
jQuery( document ).ready( function( $ ) {
<?php if ( aps_is_read_only() ) : ?>
$rows = $( \'#the-list tr.status-archive\' );
$.each( $rows, function() {
disallowEditing( $( this ) );
} );
<?php endif; ?>
$( \'select[name="_status"]\' ).append( \'<option value="archive"><?php esc_html_e( \'Archived\', \'archived-post-status\' ) ?></option>\' );
$( \'.editinline\' ).on( \'click\', function() {
var $row = $( this ).closest( \'tr\' ),
$option = $( \'.inline-edit-row\' ).find( \'select[name="_status"] option[value="archive"]\' ),
is_archived = $row.hasClass( \'status-archive\' );
$option.prop( \'selected\', is_archived );
} );
<?php if ( aps_is_read_only() ) : ?>
$( \'.inline-edit-row\' ).on( \'remove\', function() {
var id = $( this ).prop( \'id\' ).replace( \'edit-\', \'\' ),
$row = $( \'#post-\' + id );
if ( $row.hasClass( \'status-archive\' ) ) {
disallowEditing( $row );
}
} );
function disallowEditing( $row ) {
var title = $row.find( \'.column-title a.row-title\' ).text();
$row.find( \'.column-title a.row-title\' ).replaceWith( title );
$row.find( \'.row-actions .edit\' ).remove();
}
<?php endif; ?>
} );
</script>
<?php
}
add_action( \'admin_footer-edit.php\', \'aps_edit_screen_js\' );
/**
* Prevent Archived content from being edited.
*
* @action load-post.php
*/
function aps_load_post_screen() {
if ( ! aps_is_read_only() ) {
return;
}
$post_id = (int) filter_input( INPUT_GET, \'post\', FILTER_SANITIZE_NUMBER_INT );
$post = get_post( $post_id );
if (
is_null( $post )
||
aps_is_excluded_post_type( $post->post_type )
||
\'archive\' !== $post->post_status
) {
return;
}
$action = filter_input( INPUT_GET, \'action\', FILTER_SANITIZE_STRING );
$message = (int) filter_input( INPUT_GET, \'message\', FILTER_SANITIZE_NUMBER_INT );
// Redirect to list table after saving as Archived
if ( \'edit\' === $action && 1 === $message ) {
wp_safe_redirect(
add_query_arg(
\'post_type\',
$post->post_type,
self_admin_url( \'edit.php\' )
),
302
);
exit;
}
wp_die(
__( "You can\'t edit this item because it has been Archived. Please change the post status and try again.", \'archived-post-status\' ),
translate( \'WordPress › Error\' )
);
}
add_action( \'load-post.php\', \'aps_load_post_screen\' );
/**
* Display custom post state text next to post titles that are Archived.
*
* @filter display_post_states
*
* @param array $post_states
* @param WP_Post $post
*
* @return array
*/
function aps_display_post_states( $post_states, $post ) {
if (
aps_is_excluded_post_type( $post->post_type )
||
\'archive\' !== $post->post_status
||
\'archive\' === get_query_var( \'post_status\' )
) {
return $post_states;
}
return array_merge(
$post_states,
array(
\'archive\' => __( \'Archived\', \'archived-post-status\' ),
)
);
}
add_filter( \'display_post_states\', \'aps_display_post_states\', 10, 2 );
/**
* Close comments and pings when content is Archived.
*
* @action save_post
*
* @param int $post_id
* @param WP_Post $post
* @param bool $update
*/
function aps_save_post( $post_id, $post, $update ) {
if (
aps_is_excluded_post_type( $post->post_type )
||
wp_is_post_revision( $post )
) {
return;
}
if ( \'archive\' === $post->post_status ) {
// Unhook to prevent infinite loop
remove_action( \'save_post\', __FUNCTION__ );
$args = array(
\'ID\' => $post->ID,
\'comment_status\' => \'closed\',
\'ping_status\' => \'closed\',
);
wp_update_post( $args );
// Add hook back again
add_action( \'save_post\', __FUNCTION__, 10, 3 );
}
}
add_action( \'save_post\', \'aps_save_post\', 10, 3 );
下面的第二个代码是关于页面过期的。现在在第页过期之后。更改为
draft statut. 我的
GOAL 就是把它放进去
archived statut 如果到期日到了。如果有人试图用旧日期更改已发布页面上的更改日期。将页面设置为已存档并重定向到列表页面。我试图更改代码的草稿状态,但它没有改变任何东西。
Code expiration post/page
<?php
// ADD OPTIONS PAGE PHP PAGE STYLE
class DropdownOptionSetting {
private $hugu_ped_setting_options;
public function __construct() {
add_action( \'admin_menu\', array( $this, \'hugu_ped_setting_add_plugin_page\' ) );
add_action( \'admin_init\', array( $this, \'hugu_ped_setting_page_init\' ) );
}
public function hugu_ped_setting_add_plugin_page() {
add_options_page(
\'Post Expiration\', // page_title
\'Post Expiration\', // menu_title
\'manage_options\', // capability
\'hugu_ped_option_setting\', // menu_slug
array( $this, \'hugu_ped_setting_create_admin_page\' ) // function
);
}
//CONSTRUCT THE OPTION PAGE
public function hugu_ped_setting_create_admin_page() {
$this->hugu_ped_setting_options = get_option( \'hugu_ped_setting_option_name\' ); ?>
<div class="wrap">
<h2>Post Expiration Date Settings</h2>
<p></p>
<!-- ?php settings_errors(); ? NOT NEEDED -->
<form method="post" action="options.php">
<?php
settings_fields( \'hugu_ped_setting_option_group\' );
do_settings_sections( \'hugu_ped-setting-admin\' );
submit_button();
?>
</form>
<hr>
<form action="https://huguetteinc.us19.list-manage.com/subscribe/post?u=5e4a771ae0566de48ad8da160&id=901a41d61b" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<h2>Join our mailing list for news and updates</h2>
<div id="mc_embed_signup">
<div id="mc_embed_signup_scroll">
<div class="mc-field-group">
<label for="mce-EMAIL">Email Address: </label>
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</div> <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_5e4a771ae0566de48ad8da160_901a41d61b" tabindex="-1" value=""></div>
<div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</div>
<p><i>Sign up and you can receive periodic updates about this plugin. We\'ll never spam you, but we will give you a chance to provide feedback that will play a part in the future of this plugin.</i></p>
<p><i><a href="https://huguetteinc.com">Huguette Inc.</a></i></p>
</form>
</div>
</div>
<?php }
public function hugu_ped_setting_page_init() {
register_setting(
\'hugu_ped_setting_option_group\', // option_group
\'hugu_ped_setting_option_name\', // option_name
array( $this, \'hugu_ped_setting_sanitize\' ) // sanitize callback
);
add_settings_section(
\'hugu_ped_setting_setting_section\', // id
\'Settings\', // title
array( $this, \'hugu_ped_setting_section_info\' ), // callback
\'hugu_ped-setting-admin\' // page
);
add_settings_field(
\'hugu_ped_0\', // id
\'DateTime Selector:\', // title
array( $this, \'hugu_ped_0_callback\' ), // callback
\'hugu_ped-setting-admin\', // page
\'hugu_ped_setting_setting_section\' // section
);
}
public function hugu_ped_setting_sanitize($input) {
$sanitary_values = array();
if ( isset( $input[\'hugu_ped_0\'] ) ) {
$sanitary_values[\'hugu_ped_0\'] = $input[\'hugu_ped_0\'];
}
return $sanitary_values;
}
public function hugu_ped_setting_section_info() {
}
//BUILD THE DROPDOWN
//OPTION 3 HIDDEN FOR NOW!
public function hugu_ped_0_callback() {
?> <select name="hugu_ped_setting_option_name[hugu_ped_0]" id="hugu_ped_0">
<?php $selected = (isset( $this->hugu_ped_setting_options[\'hugu_ped_0\'] ) && $this->hugu_ped_setting_options[\'hugu_ped_0\'] === \'option-one\') ? \'selected\' : \'\' ; ?>
<option value="option-one" <?php echo $selected; ?>>Universal</option>
<?php $selected = (isset( $this->hugu_ped_setting_options[\'hugu_ped_0\'] ) && $this->hugu_ped_setting_options[\'hugu_ped_0\'] === \'option-two\') ? \'selected\' : \'\' ; ?>
<option value="option-two" <?php echo $selected; ?>>Native</option>
<?php $selected = (isset( $this->hugu_ped_setting_options[\'hugu_ped_0\'] ) && $this->hugu_ped_setting_options[\'hugu_ped_0\'] === \'option-three\') ? \'selected\' : \'\' ; ?>
<option value="option-three" style="display: none;"<?php echo $selected; ?>>Option Three</option>
</select> <?php
}
}
if ( is_admin() )
$hugu_ped_setting = new DropdownOptionSetting();
//
//BACK TO VERIONS <=1.1 STUFF
// INCLUDE TIMEDATE PICKER JQUERY IN ADMIN AREA
function HUGU_include_jquery() {
wp_register_script(\'flatpickr\', \'https://cdn.jsdelivr.net/npm/flatpickr\');
wp_enqueue_script( \'flatpickr\' );
wp_register_style(\'flatpickrStyle\', \'https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css\', \'all\');
wp_enqueue_style(\'flatpickrStyle\');
}
add_action(\'admin_head\', \'HUGU_include_jquery\');
// ADD LINKS ON THE PLUGIN PAGE
function hugu_ped_plugin_action_links($links, $file) {
$this_plugin = basename(plugin_dir_url(__FILE__)) . \'/post-expiration-date.php\';
if($file == $this_plugin) {
$links[] = \'<a href="options-general.php?page=hugu_ped_option_setting">\' . __(\'Settings\', \'post-expiration-date\') . \'</a>\';
}
return $links;
}
add_filter(\'plugin_action_links\', \'hugu_ped_plugin_action_links\', 10, 2);
// ADD THE METABOX TO THE EDIT POSTS PAGE
function hugu_ped_add_expire_date_metabox() {
//ADD CUSTOM POST TYPES HERE
$screens = array( \'post\', \'page\');
foreach ( $screens as $screen ) {
add_meta_box( \'hugu_ped_expire_date_metabox\', __( \'Expiration Date\', \'hugu\'), \'hugu_ped_expire_date_metabox_callback\', $screen, \'side\', \'high\' );
}
}
add_action( \'add_meta_boxes\', \'hugu_ped_add_expire_date_metabox\' );
// THIS IS THE CALLBACK FUNCTION FOR THE METABOX
function hugu_ped_expire_date_metabox_callback( $post ) { ?>
<form action="" method="post">
<?php
// THE NONCE
wp_nonce_field( \'hugu_ped_expire_date_metabox_nonce\', \'hugu_nonce\' );
//CHECK FOR METADATA
$hugu_expire_date = get_post_meta( $post->ID, \'expires\', true );
?>
<label for "hugu_expire_date"><?php __(\'expire Date\', \'hugu\' ); ?></label>
<script type="text/javascript">
jQuery(document).ready(function($){
$(\'#HUGUdatetime\').flatpickr({
altInput: true,
altFormat: "M j, Y @ H:i",
enableTime: true,
dateFormat: \'Y-m-d\\\\TH:i\'
});
$(".clear_button").click(function() {
$(\'#HUGUdatetime\').flatpickr().clear();
$(\'#HUGUdatetime\').attr(\'value\', \'\');
});
});
</script>
<?php
//function dateTimePost(){
$dropdown_option = get_option( \'hugu_ped_setting_option_name\' ); // Array
$dropdown_value = $dropdown_option[\'hugu_ped_0\']; // Option value
if ($dropdown_value === \'option-two\') {
echo\'<input id="date" type="datetime-local" class="MyDate" name="hugu_expire_date" value="\' . $hugu_expire_date . \'"/>\';
} else {
echo \'<input type="text" id="HUGUdatetime" class="MyDate" name="hugu_expire_date" value="\' . $hugu_expire_date . \'"/><a class="clear_button hide-if-no-js button-cancel" title="clear" data-clear style="text-decoration:underline;">Clear</a>\';
}
?>
</form>
<?php }
// SAVE THE DATETIME FROM THE METABOX
function hugu_ped_save_expire_date_meta( $post_id ) {
// NONCE EXISTS?
if( !isset( $_POST[\'hugu_nonce\'] ) ||
!wp_verify_nonce( $_POST[\'hugu_nonce\'],
\'hugu_ped_expire_date_metabox_nonce\'
) ) {
return;
}
// CHECK FOR USER PERMISSION
if ( !current_user_can( \'edit_post\', $post_id ) )
return;
if ( !empty( $_POST[\'hugu_expire_date\'] ) ) {
//CHECK THE FORMAT BEFORE SUBMIT
if(hugu_ped_validateDate($_POST[\'hugu_expire_date\'])){
// if expires time is in the past, set post to draft
// and don\'t save the date
$expires_epoch = strtotime($_POST[\'hugu_expire_date\']);
if($expires_epoch < time()){
remove_action( \'save_post\', \'hugu_ped_save_expire_date_meta\' );
wp_update_post(array(
\'ID\' => $post_id,
\'post_status\' => \'draft\',
));
delete_post_meta( $post_id, \'expires\' );
add_action( \'save_post\', \'hugu_ped_save_expire_date_meta\' );
}
else {
// FORMAT CORRECT? UPDATE. ELSE CLEAR META DATA
update_post_meta( $post_id, \'expires\', $_POST[\'hugu_expire_date\']);
}
} else {
delete_post_meta( $post_id, \'expires\' ); //If you remove the expiration date in the form, it will remove also from the meta
}
} else{
delete_post_meta($post_id, \'expires\');
}
}
add_action( \'save_post\', \'hugu_ped_save_expire_date_meta\' );
function hugu_ped_validateDate($date)
{
try {
$dateTime = new DateTime($date);
}
catch(Exception $e){
return false;
}
return $dateTime !== false;
}
function hugu_ped_wpdb_query(){
// CODE COMPETITION METHOD
global $wpdb;
// check if there are expirable posts
$expirable_posts = $wpdb->get_results("
SELECT * from {$wpdb->prefix}postmeta
WHERE {$wpdb->prefix}postmeta.meta_key=\'expires\' AND {$wpdb->prefix}postmeta.meta_value <= NOW()
");
if(!empty($expirable_posts)){
$wpdb->query("
UPDATE {$wpdb->prefix}posts
JOIN {$wpdb->prefix}postmeta
ON {$wpdb->prefix}postmeta.post_id={$wpdb->prefix}posts.ID
SET {$wpdb->prefix}posts.post_status= \'draft\'
WHERE {$wpdb->prefix}postmeta.meta_key=\'expires\' AND {$wpdb->prefix}postmeta.meta_value <= NOW()
");
$wpdb->query("
DELETE FROM {$wpdb->prefix}postmeta
WHERE meta_key=\'expires\' AND meta_value < NOW()
");
}
}
add_action( \'wp_loaded\', \'hugu_ped_wpdb_query\' );
// ADD COLUMN TO EDIT.PHP //////////
// CREATE THE COLUMNS
add_filter(\'manage_posts_columns\', \'hugu_ped_my_columns\');
function hugu_ped_my_columns($columns) {
$columns[\'expires\'] = \'Exp. Date\';
return $columns;
}
add_filter(\'manage_pages_columns\', \'hugu_ped_my_pages_columns\');
function hugu_ped_my_pages_columns($columnsPage) {
$columnsPage[\'expires\'] = \'Exp. Date\';
return $columnsPage;
}
//POPULATE THE COLUMNS
add_action(\'manage_posts_custom_column\', \'hugu_ped_my_show_columns\');
function hugu_ped_my_show_columns($name) {
global $post;
switch ($name) {
case \'expires\':
$eventDate = get_post_meta( $post->ID, \'expires\', true );
if(!empty($eventDate)){
echo date(\'Y/m/d H:i\', strtotime($eventDate));
}
else {
echo \'—\';
}
}
}
add_action(\'manage_pages_custom_column\', \'hugu_ped_my_show_pages_columns\');
function hugu_ped_my_show_pages_columns($name) {
global $post;
switch ($name) {
case \'expires\':
$eventDateP = get_post_meta( $post->ID, \'expires\', true );
if(!empty($eventDateP)){
echo date(\'Y/m/d H:i\', strtotime($eventDateP));
}
else {
echo \'—\';
}
}
}
/////////COLUMN CREATION FINISHED///////
if (is_admin()) {
//register_activation_hook(__FILE__, \'activate_HUGU_easyCDS\');
//register_deactivation_hook(__FILE__, \'deactive_HUGU_easyCDS\');
//add_action(\'admin_init\', \'admin_init_HUGU_easyCDS\');
//add_action(\'admin_menu\', \'admin_menu_hugu_ped\');
//add_action( \'admin_init\', \'hugu_ped_register_settings\' );
}
?>
希望有人能帮忙。谢谢