如果为自定义帖子类型中的任何其他帖子选择了元字段选项,如何禁用该选项?

时间:2018-10-18 作者:puneet

我正在使用自定义元字段处理自定义帖子类型post type (如post格式)。我能够根据元键值保存和检索帖子。但我面临的问题是,如果已经选择了该字段的选项,如何限制添加新帖子。即,如果已选择该选项,则用户将为禁用该选项ADD NEW POST.

以下是我迄今为止所做的:

function ps_add_meta_box() {

        add_meta_box(
                \'ps_sectionid\', \'Distinctive Person Format\', \'ps_meta_box_callback\', \'distinctiveperson\',\'side\',\'high\'
        ); //you can change the 4th paramter i.e. post to custom post type name, if you want it for something else

}

add_action( \'add_meta_boxes\', \'ps_add_meta_box\' );


function ps_meta_box_callback( $post ) {

        // Add an nonce field so we can check for it later.
        wp_nonce_field( \'ps_meta_box\', \'ps_meta_box_nonce\' );

        /*
         * Use get_post_meta() to retrieve an existing value
         * from the database and use the value for the form.
         */
        $value = get_post_meta( $post->ID, \'ps_sectionid\', true ); //my_key is a meta_key. Change it to whatever you want

        ?>
        <!--<label for="ps_new_field"><?php _e( "Choose value:", \'choose_value\' ); ?></label>
        <br />  -->
        <input type="radio" name="the_name_of_the_radio_buttons" value="value1" <?php checked( $value, \'value1\' ); ?> >TYpe1<br>
        <input type="radio" name="the_name_of_the_radio_buttons" value="value2" <?php checked( $value, \'value2\' ); ?> >Type2<br>
        <input type="radio" name="the_name_of_the_radio_buttons" value="value3" <?php checked( $value, \'value3\' ); ?> >Type3<br>
        <input type="radio" name="the_name_of_the_radio_buttons" value="value4" <?php checked( $value, \'value4\' ); ?> >type4<br>
        <input type="radio" name="the_name_of_the_radio_buttons" value="value5" <?php checked( $value, \'value5\' ); ?> >Type5<br>

        <?php

}

function ps_save_meta_box_data( $post_id ) {

        /*
         * We need to verify this came from our screen and with proper authorization,
         * because the save_post action can be triggered at other times.
         */

        // Check if our nonce is set.
        if ( !isset( $_POST[\'ps_meta_box_nonce\'] ) ) {
                return;
        }

        // Verify that the nonce is valid.
        if ( !wp_verify_nonce( $_POST[\'ps_meta_box_nonce\'], \'ps_meta_box\' ) ) {
                return;
        }

        // If this is an autosave, our form has not been submitted, so we don\'t want to do anything.
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
                return;
        }

        // Check the user\'s permissions.
        if ( !current_user_can( \'edit_post\', $post_id ) ) {
                return;
        }


        // Sanitize user input.
        $new_meta_value = ( isset( $_POST[\'the_name_of_the_radio_buttons\'] ) ? sanitize_html_class( $_POST[\'the_name_of_the_radio_buttons\'] ) : \'\' );

        // Update the meta field in the database.
        update_post_meta( $post_id, \'ps_sectionid\', $new_meta_value );

}

add_action( \'save_post\', \'ps_save_meta_box_data\' );

1 个回复
SO网友:Antti Koskinen

如果我理解正确,您希望在用户添加新帖子时阻止用户选择已在其他帖子上选择的单选选项,对吗?

我想你需要first 检查用户是否在元数据库的“添加新”页面上。你可以用global $pagenow 变量那会给你post-new.php 当您处于“添加新”页面时。

(旁注:您还可以将该检查包装在自定义函数中,如图所示,How to determine whether we are in add New page/post/CPT or in edit page/post/CPT in wordpress admin?)

Then 执行条件检查以确保它是“添加新”页面。如果是,请获取其他帖子上已选择的所有值。这对我来说有点陌生,但我在这件事上找到了一条很有前途的老线索-How to get a meta value from all post

我认为习俗get_meta_values 旧线程上共享的函数应该可以为您实现这一点。它可能需要一些调整,但测试一下,看看它是如何工作的。

third, 当您拥有以前选择的值的数组时,可以使用它将匹配选项标记为选中/禁用。

希望我没有太大的失误,并回答了你的问题。很抱歉,我没有自己的代码与您共享。这是我读了你的问题后突然想到的想法和概念。

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register