help with a private plugin I am writing, please
-
Hi,
I am trying to create a plugin for my own use, I think the problem is a coding one.I have copied some of this code from a plugin and added some myself to try to create my own plugin rather than adding it to my function.php file.
1. I have added a new record in the postmeta table with the topic ID. meta key and meta value for every topic I have in the table.
2. I want a meta box at the backend on both the topic and reply screens, in the metabox for both screens I want to show the meta value of the associated topic.
I have done both these3. I would like to be able to change this value, but only in the topic screen.
With the code below, if I change the value in the reply screen when I update nothing changes which is great, but if I change the value in the topic screen, when I update I get a blank value returned and the original value in the table is also removed.
When I create a new topic I would also like to populate the meta table.*/
class bbPress_add_meta_fields {
/**
* Construct.
*/private $match_m_fields = array();
public function __construct() {
if ( is_admin() ) {
add_action( ‘load-post.php’, array( $this, ‘init_metabox’ ) );
add_action( ‘load-post-new.php’, array( $this, ‘init_metabox’ ) );
$this->match_m_fields = array(‘topic’, ‘reply’);
}
}/**
* Meta box initialization.
*/
public function init_metabox() {
add_action( ‘add_meta_boxes’, array( $this, ‘add_metabox’ ) );
add_action( ‘save_post’, array( $this, ‘save_metabox’ ), 10, 2 );
}/**
* Adds the meta box.
*/
public function add_metabox() {
add_meta_box(
‘bbp_m_field_metabox’,
__(‘Twitter name’, ‘textdomain’ ),
array( $this, ‘render_metabox’ ),
‘topic’, ‘side’, ‘high’
);
add_meta_box(
‘bbp_m_field_metabox’,
__( ‘Twitter name’, ‘textdomain’ ),
array( $this, ‘render_metabox’ ),
‘reply’, ‘side’, ‘high’
);}
/**
* Renders the meta box.
*/
public function render_metabox( $post ) {
// Add nonce for security and authentication.
wp_nonce_field( ‘custom_nonce_action’, ‘custom_nonce’ );// get the topic id
$post_id = get_the_ID();
$reply_topic_id = bbp_get_reply_topic_id( $post_id );
// get value from table
$twitval = get_post_meta( $reply_topic_id, ‘bbp_twitname’, true );
echo $twitval;
echo ‘<br><label for=”bbp_twitname”>Twitter Name</label><br>’;
echo ‘<input type=”text” name = “bbp_twitname” value= “‘ . $twitval .’”>’;
//echo ‘<input type=”submit” value=”Submit” />’;add_action ( ‘bbp_new_topic’, ‘bbp_save_extra_fields’, 10, 2 );
add_action ( ‘bbp_edit_topic’, ‘bbp_save_extra_fields’, 10, 2 );function bbp_save_extra_fields($reply_topic_id,$twitval) {
if (isset($_POST) && $_POST[‘bbp_twitname’]!=”)
update_post_meta( $reply_topic_id, ‘bbp_twitname’, $twitval );
}
}/**
* Handles saving the meta box.
*
* @param int $reply_topic_id Post ID.
* @param WP_Post $post Post object.
* @return null
*/public function save_metabox( $reply_topic_id) {
// Add nonce for security and authentication.
$nonce_name = isset( $_POST[‘custom_nonce’] ) ? $_POST[‘custom_nonce’] :”;
$nonce_action = ‘custom_nonce_action’;// Check if nonce is set.
if ( ! isset( $nonce_name ) ) {
return;
}// Check if nonce is valid.
if ( ! wp_verify_nonce( $nonce_name, $nonce_action ) ) {
return;
}// Check if user has permissions to save data.
if ( ! current_user_can( ‘edit_post’, $reply_topic_id ) ) {
return;
}// Check if not an autosave.
if ( wp_is_post_autosave( $reply_topic_id ) ) {
return;
}// Check if not a revision.
if ( wp_is_post_revision( $reply_topic_id ) ) {
return;
}// Check to match the slug
if(!in_array($post->post_type, $this->match_m_fields)){
// return;
}$meta_box_text_value = $twitval;
if(isset($_POST[“bbp_twitname”])) {
$meta_box_text_value = $_POST[“bbp_twitname”];
}update_post_meta($reply_topic_id, ‘bbp_twitname’, $twitval);
}/**
* is_edit_page
* function to check if the current page is a post edit page
*/public function is_edit_page($new_edit = null){
global $pagenow;
//make sure we are on the backend
if (!is_admin()) return false;
if($new_edit == “edit”)
return in_array( $pagenow, array( ‘post.php’, ) );
elseif($new_edit == “new”) //check for new post page
return in_array( $pagenow, array( ‘post-new.php’ ) );
else //check for either new or edit
return in_array( $pagenow, array( ‘post.php’, ‘post-new.php’ ) );
}}
new bbPress_add_meta_fields();
- You must be logged in to reply to this topic.