I have a page template that allows users to create and update posts from the front end. I also am using 2 plugins, 1 that allows the user to rate posts from 1-5 stars and another that allows them to favorite the posts.
I also have a page to allows the user to toggle between sorting the posts by date/category/post-type/etc. You can see the page here: http://www.theseattlevine.com/the-vine/
The problem is, if I sort the posts by either the star rating or by the number of favorites it has, WordPress only returns posts that have that meta value and does NOT show posts that have not yet received it. With that being said, I need to do 1 of 2 things:
- Automatically set the meta value to a default value when the post is created
or - Alter the wp_query to also show posts that do not yet have the value.
Anyone know how I can do either of these things? I prefer #1, but either will work.
Here is the page template code, if that’s useful.
<?php
/**
* Template Name: New UserPost
*
* A Page template for Submitting User Post
*
*/
if(!is_user_logged_in()){
header("location:". esc_url(home_url('')));
?>
<script type="text/javascript">
window.location = '<?PHP echo esc_url(home_url('')); ?>';
</script>
<?PHP
die('');
}
wp_enqueue_script('jquery');
function add_header(){
?>
<link rel="stylesheet" type="text/css"
href="<?PHP bloginfo('template_directory'); ?>/css/redmond/jquery-ui-1.9.1.custom.min.css" />
<script type="text/javascript" src="<?PHP bloginfo('template_directory') ?>/js/jquery-ui-1.9.1.custom.min.js"></script>
<script type="text/javascript" src="<?PHP bloginfo('template_directory'); ?>/fancybox/jquery.mousewheel-3.0.4.pack.js"></script>
<script type="text/javascript" src="<?PHP bloginfo('template_directory'); ?>/fancybox/jquery.fancybox-1.3.4.pack.js"></script>
<link rel="stylesheet" type="text/css" href="<?PHP bloginfo('template_directory'); ?>/fancybox/jquery.fancybox-1.3.4.css" media="screen" />
<script type="text/javascript">
function show_loading_div(){
data="<p>Uploading your file, one moment...</p>";
data+="<img src="<?PHP echo get_bloginfo('template_directory'); ?>/images/ajaxloading_bar.gif" />";
jQuery('#fancybox-frame').contents().find("#upload_frm").hide();
jQuery('#fancybox-frame').contents().find("#MSG_DIV").html(data);
}
function get_featured_image(){
if(jQuery('#featured_img_id').val()==-1){
return;
}
jQuery('#featured_img_div').html('');
jQuery.ajax({
url:'<?PHP echo get_permalink(); ?>',
data:"featured_img_id=" + jQuery('#featured_img_id').val() + "&req=get_featured_image",
beforeSend:function(){
jQuery('#featured_img_loading').show();
},complete:function(){
jQuery('#featured_img_loading').hide();
},success:function(data){
jQuery('#featured_img_div').html(data);
}
});
}
jQuery().ready(function(){
jQuery('.loading,#featured_img_action').hide();
jQuery('#dialog_message').dialog({
autoOpen:false,
buttons:{
'Ok':function(){
jQuery(this).dialog('close');
}
}
});
jQuery('#cancel_btn').click(function(){
if(jQuery('#post_id').val()==-1){
jQuery('#dialog_message').html('Post has been discarded').dialog('option',{
buttons:{
'Ok':function(){
jQuery(this).html('One moment...');
window.location='<?PHP echo esc_url(home_url('dashboard/')); ?>'
}
}
}).dialog('open');
}else{
jQuery.ajax({
url:'<?PHP echo get_permalink(); ?>',
data:jQuery('#tsv_user_post_form').serialize() + "&req=discard_post",
beforeSend:function(){
jQuery('#submit_loading').show();
},complete:function(){
jQuery('#submit_loading').hide();
},success:function(data){
jQuery('#exe').html(data);
}
});
}
})
jQuery('#upload_img').click(function(){
jQuery.fancybox({
'autoScale' : true,
'transitionIn' : 'none',
'transitionOut' : 'none',
'type' : 'iframe',
'href' : "<?PHP echo esc_url(home_url('image-upload')) ?>?post_id=" + jQuery('#post_id').val()+'&img_id=' + jQuery('#featured_img_id').val() ,
'onClosed' : function(){
get_featured_image();
if(jQuery('#featured_img_id').val()!=-1){
jQuery('#featured_img_action').show()
}
}
});
});
jQuery('#remove_image_btn').click(function(){
jQuery.ajax({
url:'<?PHP echo esc_url(home_url('new-post')); ?>',
data:'req=delete_attach&aid=' + jQuery('#featured_img_id').val(),
beforeSend:function(){
jQuery('#featured_img_div').html('Deleting Image....');
jQuery('#featured_img_action').hide()
},
success:function(data){
jQuery('#featured_img_div').html('');
jQuery('#featured_img_id').val('-1');
},
complete:function(){
jQuery('#remove_image_btn').hide();
}
})
});
jQuery('#user_post_submit,#user_post_preview,#user_post_savedraft').click(function(){
var req;
switch(jQuery(this).attr('id')){
case 'user_post_submit':
req='publish';
break;
case 'user_post_savedraft':
req='save_draft';
break;
case 'user_post_preview':
req='post_preview';
break;
}
jQuery.ajax({
url:'<?PHP echo get_permalink(); ?>',
data:jQuery('#tsv_user_post_form').serialize() + "&req=" + req,
beforeSend:function(){
jQuery('#submit_loading').show();
},complete:function(){
jQuery('#submit_loading').hide();
},success:function(data){
//alert(data);
jQuery('#exe').html(data);
}
})
})
});
</script>
<?PHP
}
add_action('wp_head','add_header');
switch($_REQUEST['req']){
case 'delete_attach':
$attachment_id = $_REQUEST['aid'];
wp_delete_post($attachment_id,TRUE);
die('');
break;
case 'discard_post':
$post_id = $_REQUEST['post_id'];
wp_delete_post($post_id,TRUE);
?>
<script type="text/javascript">
jQuery('#dialog_message').html('Post has been discarded').dialog('option',{
buttons:{
'Ok':function(){
jQuery(this).html('One moment...');
window.location='<?PHP echo esc_url(home_url('dashboard/')); ?>'
}
}
}).dialog('open');
</script>
<?PHP
die('');
break;
case 'get_featured_image':
$featured_img = $_REQUEST['featured_img_id'];
echo wp_get_attachment_image($featured_img, array(100,100));
die('');
break;
case 'publish':
case 'save_draft':
case 'post_preview':
$error_flag = FALSE;
$error_message = array();
$post_id = $_REQUEST['post_id'];
$categories = array($_REQUEST['cat']);
$featured_img = $_REQUEST['featured_img_id'];
/**
* Validation Step(s)
*/
if(empty($_REQUEST['user_post_title'])){
$error_flag = TRUE;
$error_msg[]=array(
'key' => 'error_user_post_title',
'value' => __('Please enter a title','tsv'),
);
}elseif(strlen($_REQUEST['user_post_title'])>125){
$error_flag = TRUE;
$error_msg[]=array(
'key' => 'error_user_post_title',
'value' => __('Please enter a title with less then 125 characters','tsv'),
);
}
if(empty($_REQUEST['user_post_summary'])){
$error_flag = TRUE;
$error_msg[]=array(
'key' => 'error_user_post_summary',
'value' => __('Please enter a short summary of the post','tsv'),
);
}elseif(strlen($_REQUEST['user_post_summary'])>250){
$error_flag = TRUE;
$error_msg[]=array(
'key' => 'error_user_post_summary',
'value' => __('Please enter a summary with less then 250 characters','tsv'),
);
}
if(empty($_REQUEST['user_post_content'])){
$error_flag = TRUE;
$error_msg[]=array(
'key' => 'error_user_post_content',
'value' => __('Please enter some content','tsv'),
);
}
if(empty($_REQUEST['cat']) || $_REQUEST['cat']==-1){
$error_flag = TRUE;
$error_msg[]=array(
'key' => 'error_cat',
'value' => __('Please choose a category','tsv'),
);
}
if(count($error_msg)>0 && $error_flag){
?>
<script type="text/javascript">
jQuery('.error').html('').hide();
var temp=<?PHP echo json_encode($error_msg); ?>;
for(i=0;i<temp.length;i++)
jQuery('#' + temp[i].key ).show().html(temp[i].value);
jQuery("html,body").animate({ scrollTop: 0 }, "slow");
</script>
<?PHP
}else{
$post_param = array(
'post_content' => $_REQUEST['user_post_content'],
'post_title' => $_REQUEST['user_post_title'],
'post_excerpt' => $_REQUEST['user_post_summary'],
'post_type' => 'tsv_userpost',
'tax_input' => array('category'=>$categories)
);
if(!empty($_REQUEST['user_post_tags'])){
$post_param['tags_input'] = array_slice(explode(",", $_REQUEST['user_post_tags']),0,5);
}
if($post_id!=-1){
$post_param['ID']=$post_id;
}
/**
* Action Based on The Button Pressed
*/
switch($_REQUEST['req']){
case 'publish':
$post_param['post_status'] = 'publish';
$new_post_id=wp_insert_post($post_param);
?>
<script type="text/javascript">
jQuery('#dialog_message').html('Post published succesfully!').dialog('option',{
buttons:{
'Ok':function(){
jQuery(this).html('One moment....');
window.location='<?PHP echo esc_url(home_url('dashboard')); ?>'
}
}
}).dialog('open');
</script>
<?PHP
break;
case 'save_draft':
$post_param['post_status'] = 'draft';
$new_post_id=wp_insert_post($post_param);
?>
<script type="text/javascript">
jQuery('#post_id').val('<?PHP echo $new_post_id; ?>')
jQuery('#dialog_message').html('Post draft saved').dialog('option',{
buttons:{
'Ok':function(){
jQuery(this).dialog('close');
}
}
}).dialog('open');
</script>
<?PHP
break;
case 'post_preview':
$post_param['post_status'] = 'draft';
$new_post_id=wp_insert_post($post_param);
?>
<script type="text/javascript">
jQuery('#post_id').val('<?PHP echo $new_post_id; ?>')
//jQuery('#dialog_message').html('Loading preview, one moment...').dialog('open');
jQuery('#dialog_message').html('Please click Ok To load Preview').dialog('option',{buttons:{
'Ok':function(){
window.open('<?PHP echo esc_url(home_url('?page_id=' . $new_post_id . '&preview=true')); ?>');
jQuery(this).dialog('close');
}
}}).dialog('open');
/*jQuery('#preview_link').attr({'href':'<?PHP echo esc_url(home_url('?page_id=' . $new_post_id . '&preview=true')); ?>'})
jQuery('#preview_link')[0].click();*/
//window.open('<?PHP echo esc_url(home_url('?page_id=' . $new_post_id . '&preview=true')); ?>');
</script>
<?PHP
break;
}
if($featured_img!=-1){
update_post_meta($new_post_id,'_thumbnail_id',$featured_img);
}else{
delete_post_meta($new_post_id,'_thumbnail_id');
}
}
die('');
break;
}
global $current_user;
get_currentuserinfo();
if(isset($_GET['post_id'])){
$post_id = $_GET['post_id'];
$post_obj = get_post($post_id);
if($post_obj->post_author!=$current_user->ID){
header("location:" . esc_url(home_url('')));
die('');
}else{
$featured_img_id = get_post_meta($post_id,'_thumbnail_id',TRUE);
if(empty($featured_img_id)){
$featured_img_id = -1;
}
}
}else{
$post_id = -1; // -1 Will be for New Post
$featured_img_id = -1;
}
get_header();
?>
<section id="primary">
<div id="content" role="main">
<?php userpost_menu(); ?>
<form action="" method="post" name="" id="tsv_user_post_form" enctype="multipart/form-data" >
<input placeholder="Enter Your Title..." type="text"
value="<?PHP echo ((!empty($post_obj->post_title))?$post_obj->post_title:''); ?>" name="user_post_title" id="user_post_title" class="inputwide" />
Max 125 characters
<div class="error" id="error_user_post_title"></div>
<br />
<input placeholder="Enter short description..." type="text"
value="<?PHP echo ((!empty($post_obj->post_excerpt))?$post_obj->post_excerpt:''); ?>" name="user_post_summary" id="user_post_summary" class="inputwide" />
Max 250 characters
<div class="error" id="error_user_post_summary"></div>
<br />
<?php
$cat_ids = array(90,91,92,93,94);
$user_cats = array (
'include' => implode(",", $cat_ids), //Only shows these 5 categories
'hide_empty' => 0,
'show_option_none' =>'Choose category:',
'sort_by'=>'name',
);
$tag_str = NULL;
if(!empty($post_obj)){
$categories = wp_get_post_categories($post_obj->ID);
$tags = wp_get_post_tags($post_obj->ID,array('fields'=>'all'));
if(count($categories)>0){
foreach($categories as $cat) {
if(in_array($cat, $cat_ids)){
$user_cats['selected'] = $cat;
}
}
}
if(count($tags)>0){
foreach($tags as $tag) {
$tag_str[] = $tag->name;
}
$tag_str = implode(",", $tag_str);
}
}
?> <div class="styled-select"> <?php wp_dropdown_categories($user_cats); ?></div><?php
?>
<div class="error" id="error_cat"></div>
<br />
<input type="hidden" value="<?PHP echo $post_id; ?>"
name="post_id" id="post_id" />
<input type="hidden" value="<?PHP echo $featured_img_id; ?>"
name="featured_img_id" id="featured_img_id" />
<textarea name="user_post_content" id="user_post_content" placeholder="Enter your content..." class="inputwide"><?PHP echo ((!empty($post_obj->post_content))?$post_obj->post_content:''); ?></textarea>
<div class="error" id="error_user_post_content"></div>
(You can use basic html in this box. <a href="#">Click here for more info ADDLINK!!!</a>.)
<br /><br />
<label>Tags:</label>
<input placeholder="Seperated by commas" type="text"
value="<?PHP echo ((!is_null($tag_str)?$tag_str:'')); ?>"
name="user_post_tags" id="user_post_tags" /> (note: Only first 5 tags will be saved)
<br /><br />
<input class="cbutton" type="button" id="upload_img" value="Add/Switch Featured Image" />
<div style="margin-top:10px;" id="featured_img_loading" class="loading">
<img src="<?PHP bloginfo('template_directory'); ?>/images/ajaxloading-circul.gif" />
</div>
<div id="featured_img_ct" style="position:relative">
<div style="margin-top:10px;" id="featured_img_div">
<?PHP
if($featured_img_id!=-1){
echo wp_get_attachment_image($featured_img_id, array(150,150));
}
?>
</div>
<div id="featured_img_action" style="position:absolute;top:10px;left:100px;">
<img src="<?PHP bloginfo('template_directory'); ?>/images/b_drop.png" id="remove_image_btn" style="cursor:pointer;" />
</div>
</div>
<br /><br />
<div class="loading" id="submit_loading">
<img src="<?PHP bloginfo('template_directory'); ?>/images/ajaxloading_bar.gif" />
</div>
<div class="submit_div">
<input class="cbutton" type="button" name="submit_btn" id="user_post_submit" value="<?PHP echo ((!empty($post_obj))?'Update':'Publish'); ?>">
<input class="cbutton" type="button" name="submit_btn" id="user_post_savedraft" value="Save Draft">
<input class="cbutton" type="button" name="submit_btn" id="user_post_preview" value="Preview">
<input class="cbutton" type="button" value="Discard" name="cancel" id="cancel_btn" />
</div>
<br />
</form>
</div><!-- #content -->
</section><!-- #primary -->
<?PHP
if($featured_img_id!=-1){
add_action('wp_footer','add_wp_footer');
}
function add_wp_footer(){
?>
<script type="text/javascript">
jQuery().ready(function(){
jQuery('#featured_img_action').show();
});
</script>
<?PHP
}
?>
<div id="dialog_message"></div>
<div style="display:none" id="for_preview">
<a id="preview_link" target="_blank"></a>
</div>
<?php get_sidebar('newpost'); ?>
<?php get_footer(); ?>
Add this to your functions.php in your template folder.