Tag Info

Hot answers tagged

10

If you're on a remote server, XMLRPC would be best, but requires login details If you're in a PHP script on the same server, wp-load.php would be best ( XMLRPC will involve a request of sorts ) If you're in a bash or CLI script, WP CLI would be best, e.g.: wp post create --post_type=page --post_status=publish --post_title='A future post' ...


10

In the tutorial (Example 1), he has to declare the global $post so that he can access the post_parent from it. In a function like that, the $post is not a global variable unless he makes it so. In the codex (Example 2), it is declared global because the sample code is just a sample, explicitly trying to tell you that the $post variable is a global one. ...


9

I understand that post ID's are unique, but are they reliable as persistent data ID's? Yes.


8

There is a sad truth: you can never ever be sure that some code will not break your code, and there is nothing you can do to prevent that. Expecially in WordPress where everything is global. That said, yes, global $post is one of the most used global var, so using special care for it can be a good idea. In my code I rarely direct access to global $post. ...


7

This question is going to get some opinion based answers, but well, I'll give it a try. There are a couple of reasons why someone might've told you that, it would be great to know the context also. Upto version 3.4 or 3.5, that function only worked when the parameter was a var, that might be one of the reasons why someone told you that. I, myself, don't ...


7

For starters let's dive into what is 5 really. It is the post's ID. But what is ID in turn? It is value in the MySQL table row which identifies the specific post record. Issues with using IDs So first there are some conceptual problems with it. It's not content. It's not something user creates, manipulates, or (most of the time) aware of. WP is (by design) ...


7

You have 2 problems. First problem The line $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; will fail, because on singular post view, when the url contains '/page/XX/' the variable WordPress sets is 'page' and not 'paged'. You may think to use 'page' instead of 'paged', but that will not work too, because once the 'page' variable ...


7

The post format taxonomy: The post format is a default taxonomy, registered with: register_taxonomy( 'post_format', 'post', array( 'public' => true, 'hierarchical' => false, 'labels' => array( 'name' => _x( 'Format', 'post format' ), 'singular_name' => _x( 'Format', ...


6

Use get_edit_post_link filter. add_filter('get_edit_post_link', 'get_edit_post_link_178416', 99, 3); function get_edit_post_link_178416($link, $post_id, $context) { $scr = get_current_screen(); if ($scr->id == 'edit-post' && $context == 'display') { return 'http://google.com'; } else { return $link; } } You can ...


6

Prevent authors from publishing too short content: Here's one idea using a custom post status, for example short: /** * Register a custom 'short' post status * * @see http://wordpress.stackexchange.com/a/159044/26350 */ function wpse_short_post_status() { register_post_status( 'short', array( 'label' => _x( 'Short', ...


6

The Automatic Sponsor Posts Injector: Here's one idea based on my answer for the question: How to show Y number of custom posts after every X normal posts? I hopefully made it a little bit more useful here on Github, but it may be refined much more (future work). The SponsorPostsInjector class will help you to automatically inject the sponsor posts into ...


6

The $post global variable is set by $wp_query->the_post() (WP_Post) inside the loop and is accessible during the loop. $post holds the post data from the current post. When you are inside the loop, you don't need to call the $post global, as it is already accessible. When you are outside the loop, and you need to access post data, you need to make use ...


6

You can add a filter to 'loop_start', count how may posts you have and inject the needed number of "fake" posts that are intances of WP_Post not having a reference in DB. add_filter( 'loop_start', function( $query ) { $module = $query->post_count % 6; $to_fill = $module === 0 ? 0 : 6 - $module ; if ( (int) $query->post_count === 0 || ...


5

The pedantic answer is NO. While IDs are unique they can change without any change in UX as long as the change retains the consistency of the DB. And while creating a new post will generate a new unique ID, you can also create a post via code to reuse some "old" ID. In practice they are reliable, but if reliability is very important to you then you need to ...


5

Here's a sketch of another idea, where we create scheduling shortcuts to make it easier for the users: We can use the post_submitbox_misc_actions to add extra fields to the submit box: /** * Scheduling-Shortcuts fields. * * @see http://wordpress.stackexchange.com/a/168748/26350 */ add_action( 'post_submitbox_misc_actions', function() { if( ! ...


5

When you set a post as password protected, the protection happen on get_the_content() function. There WordPress check for a post password cookie, and if not set, not valid or expired then show the password form. This password form is submitted to wp-login.php, there a cookie is setted according to the password wrote in the form, then the request is ...


5

If this is how it looks: <img class="alignleft size-medium wp-image-8530" alt="..." src="#" width="413" height="275" /> <img class="alignleft size-medium wp-image-8529" alt="..." src="#" width="413" height="275" /> Then you have to put them together like this: <img class="alignleft size-medium wp-image-8530" alt="..." src="#" width="413" ...


4

next_posts_link and previous_posts_link (plural) are for archive pagination. For single posts you want next_post_link and previous_post_link (singular).


4

Use a custom view in the front-end: You can try to modify the SELECT queries in the front-end with the following (alpha) plugin: <?php /** * Plugin Name: wpdb - a custom SELECT view for the wp_posts table on the front-end * Version: alpha */ ! is_admin() && add_filter( 'query', function( $query ) { global $wpdb; $view = ...


4

You don't declare the order of the results when you register the post type. Instead, you do at the time the results are requested. If you're using WP_Query to get the results then you add your orderby and order arguments to the request. http://codex.wordpress.org/Class_Reference/WP_Query If you want to change the order of the results on the archive pages ...


4

Revisions to me are useless and just fills up your db. It might be useful to others though. Revisions are created each time a post is revised/updated. This just holds an archive/copy of the post before it was updated, and gives the user an option to restore the specific post to an earlier time. This works exactly like any system with a restore button. If ...


4

If I understand well you want to show the last post (one post) from one of the 3 post types you have, using a dynamic url like http://example.com/latest. First of all lets add a filter to 'do_parse_request' filter: add_filter( 'do_parse_request', function( $bool, WP $wp ) { $home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' ); $path = ...


4

If I understand well, user having a special role in your site should: Be able to edit own posts in all statuses but 'publish' and not be able to publish them, just send for revision Be able to edit others posts only when pending, but not be able to publish them, just send for revision Never be able to delete other posts, no matter the status If so, it ...


4

It looks like the xmlrpc_prepare_post filter is only applied to the output of the wp_getPost and wp_getRevision methods of the wp_xmlrpc_server class. It would be great if this code line: do_action( 'xmlrpc_call', 'wp.newPost' ); would be replaced with extra input arguments, for example: do_action( 'xmlrpc_call', 'wp.newPost', ..., $content_struct ); ...


3

You could run three get_posts() calls to snag the latest post from each post type, and build the links from there. Something like this would output the most recent post from each of the three post types in an unordered list: /** * Grab the latest post from three different post types. * * @return array Array of post objects. */ function ...


3

I suspect what you're trying to do is implement related posts, and you're using post meta to indicate which posts are related to the current post. So if I have a handbag, and there are 5 related products, the handbag product has post meta containing the IDs of those 5 products. While this sort of works, it doesn't scale, and it isn't performant. Instead ...


3

You could just rewind the query to loop through again: <?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?> <p>Post Number: <?php the_ID(); ?></p> <?php endwhile; ?> THE LOOP


3

Try removing (image), like this: <?php $content = get_the_content(); $content = preg_replace("/<img[^>]+\>/i", " ", $content); $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); echo $content; ?>


3

You are deleting all pages with that code because you are triggering the function wp_delete_post(). You should build the url to delete the page(or post) like this: $delLink = wp_nonce_url( get_bloginfo('wpurl') . "/wp-admin/post.php?action=delete&post=" . $page->ID, 'delete-post_' . $page->ID); So your code should be: $pages = get_pages(); ...


3

"Admin Stickies" for custom post types: To support sticky custom posts in the backend, you can use the following code snippet in your functions.php file in the current theme directory or in your custom plugin: /** * Set admin stickies for the 'foodmenu' custom post type */ add_action( 'init', function() { if( function_exists( 'wpse_cpt_stickies' ) ) ...



Only top voted, non community-wiki answers of a minimum length are eligible