Chester McLaughlin
Forum Replies Created
-
Forum: Plugins
In reply to: [Airpress] cacheImageFields issued’oh. ???? fixed v1.1.27
Forum: Plugins
In reply to: [Airpress] cacheImageFields issueAs we discussed (and for those who come across this thread), Airpress was double-appending the file extension on the “full” cached image—this has been fixed.
Also, Airpress wasn’t ensuring
$exif['Orientation']
was actually set, but now it does.And lastly, when using the airpress_virtualpost_query to add related queries or cache images, it massively slowed down the process of saving the Virtual Post configuration, but now it “slims” the query down so that it simply serves the purpose of testing that config against Airtable, not actually fetching and processing all the data that the Virtual Post would process from an actual page load.
Forum: Plugins
In reply to: [Airpress] cacheImageFields issueAre you up for doing a Google Hangout and sharing your screen with me? That way we could walk through it and figure it out. I can’t find a Private Message option here on WordPress support forums. Do you have an Airtable account at https://community.airtable.com so I can PM you my contact info?
Forum: Plugins
In reply to: [Airpress] trouble reproducing examplesThank you for your feedback. I dug into the plugin and found/fixed a bug. Please update to 1.1.25 (just released) and try again and let me know how it goes!
Forum: Plugins
In reply to: [Airpress] cacheImageFields issueMake sure you update (yet again) to the latest version (which is currently 1.1.24)
The following code assumes an Airpress VirtualPost configuration named, “Place”.
add_image_size( "not-too-small", "300", "300", false ); function my_airpress_virtualpost_query($query,$request,$virtual_post_config){ // Ensure we're "targeting" the right VirtualPost configuration if ($virtual_post_config["name"] == "Place"){ // Create a new Query that will be the related query $district_query = new AirpressQuery("City Districts"); $district_query->cacheImageFields("Pictures", array("not-too-small","medium","full")); // Add the above query to the Virtual Post query $query->addRelatedQuery("District",$district_query); $query->cacheImageFields("Pictures", array("not-too-small","medium")); } return $query; } add_filter("airpress_virtualpost_query", "my_airpress_virtualpost_query",10,3);
- This reply was modified 7 years, 11 months ago by Chester McLaughlin. Reason: formatting
Forum: Plugins
In reply to: [Airpress] cacheImageFields issueThanks for the feedback. I’m releasing v1.1.22 right now which resolves this issue.
Note: I’m still attempting to find a good fix for the fact that Airtable accepts image uploads from mobile devices without “applying” the rotation information to the original file. This means that when Airpress pulls the original file in order to create smaller sizes Airpress will need to read the Orientation from the EXIF and apply that. However, I’m working on a site on Pressable right now and they dissable EXIF functions and use GD (as opposed to ImageMagick) and I’m having a hard time figuring out a way to read the Rotation in this setup. If I can’t get it I’ll simply detect ImageMagick or read_exif_data and ignore the rest of the environments.
Forum: Plugins
In reply to: [Airpress] cacheImageFields issueThat looks right. Here’s a few things to check:
- ensure wp-content/airpress-image-cache is writable
- ensure your query isn’t cached (use ?fresh=true while testing)
- check your PHP/server error log and airpress.log for clues
- add additional debug statements with
airpress_debug(0,"this is a string",$this_will_be_printrd);
If none of that helps maybe we can do a screenshare and track it down.
- This reply was modified 7 years, 11 months ago by Chester McLaughlin. Reason: formatting
Forum: Plugins
In reply to: [Airpress] How to create an “Index” or “Archive” pageInstead of
[apr_loop field="Name"]
just do[apr_loop]
The former is attempting to loop through an array of records INSIDE of the Name field, whereas the later is looping through all the records available to the current Virtual Post.
Forum: Plugins
In reply to: [Airpress] Advanced Custom FieldsI only have a moment to respond, so this will be short but sweet!
Airpress doesn’t (currently) interact with a page/posts REAL custom fields. Remote Airtable data is fetched when the page/post is loaded based on your configuration settings and/or code. So rather than WordPress being “updated” when Airtable data changes, think of it as WordPress “fetches” required data when a page/post loads.
If you want to fetch remote Airtable data when a post is EDITED or CREATED that is a different task. I’ve thought of building a “Custom Fields Sync” module, but I can’t honestly think of a use-case where my existing functionality wouldn’t satisfy.
I’d love to heard a little more about why you want WordPress Custom Fields populated with Airtable data rather than accessing that data in “real-time”.
If there’s a use case I’m missing, I’d love to expand Airpress to cover it. Let me know! And thanks for the kind words and feedback.
Forum: Plugins
In reply to: [Airpress] addFilter field is not emptyThat works…. Airtable also added BLANK() which I’ve come to prefer … for absolutely no good reason. ??
$query->filterByFormula("NOT( {Field} = BLANK() )");
There’s also:
$query->filterByFormula("NOT( {Field} = FALSE() )");
Also, this link should really be more prominent throughout Airtable’s documentation, but I practically keep it open all day:
https://support.airtable.com/hc/en-us/articles/203255215-Formula-Field-Reference- This reply was modified 8 years ago by Chester McLaughlin.
Forum: Plugins
In reply to: [Airpress] Date manipulationsThis is un-tested code, but it’s how I use it:
<?php $event = $post->AirpressCollection[0]; $sDate = new DateTime($event["Start"]); $eDate = new DateTime($event["End"]); echo $sDate->format("Y-m-d H:i:s"); echo $eDate->format("Y-m-d H:i:s"); ?>
Is that what you’re asking? If not, show me what you currently do and I’ll try again.
More date formatting options here:
https://php.net/manual/en/function.date.phpForum: Plugins
In reply to: [Airpress] Advanced Custom FieldsHello, just a quick heads up that I’ve just released functionality for resizing and caching Airtable images. You can read more here:
Forum: Plugins
In reply to: [Airpress] Image sizesOverview:
cacheImageFields in v1.1.15 will examine the records returned prior to caching them in a transient so that the URL in specified fields can be replaced by local URLs. The goal is not only to allow a convenient way to get “WordPress-sized” images from Airtable, but also to provide a layer of redundancy, not relying on Airtable’s image hosting (which in light of the recent massive Amazon S3 failure could be a really good thing!) This method uses as many of the WordPress API functions as possible while still allowing for complete override and customization of image sizes. Also, I wanted to avoid adding any Airtable data to the WordPress database outside of what Airpress currently does with transients.Usage:
cacheImageFields( mixed $fields [, mixed $sizes, boolean $crop = false, boolean $regenerate = false]);
$fields is a string or an array of strings of Airtable fields names you expect to contain an array of “type”:”image/*” images.
$fields = "My Field Name"
or
$fields = array("My Field Name");
$sizes is an optional string or array of strings or a multi-dimensional array.
$sizes = "full";
$sizes = array("full","thumbnail","medium","large");
$sizes = array("medium","custom-size" => array("width" => 25, "height" => 25, "crop" => true));
$crop is an optional boolean that when true will crop and when false will contain/constrain. $crop can be specified in two places—in the sizes array and in the cacheImageFields call itself. The $crop inside the $sizes array will override the $crop passed in the cacheImageFields method.
$regenerate is an optional boolean that when true will regenerate the given size and/or given fields.
Some examples:
This is a basic $query initialization:$query = new AirpressQuery("Table Name","Configuration Name"); $query->filterByFormula("NOT({Photos} = BLANK())"); $query->fields(array("Name","Photos","Alt Photos"))->maxRecords(5);
Here’s a variety of ways to use the cacheImageFields method
These are the same. They’ll cache/use the full image(s) in the {Photos} field of whatever records are returned
$query->cacheImageFields("Photos"); $query->cacheImageFields("Photos","full"); $query->cacheImageFields(array("Photos"),array("full"));
And This:
$query->cacheImageFields("Photos"); $query->cacheImageFields("Alt Photos");
Is the same as this:
$query->cacheImageFields(array("Photos","Alt Photos"));
This will use the “full” image to create the standard sizes as defined in the WordPress media settings, however it WILL NOT save/serve a local cached copy of the full image since “full” isn’t specified
$query->cacheImageFields("Photos",array("thumbnail","medium","large"));
This will create a WordPress defined “thumbnail” and “medium” image. It will NOT save the full image, but it will obviously have to download it in order to create the smaller sizes, it just won’t be written to disk. It will also create two new arbitrary sizes called “new-size” and “alt-size”. All the sizes will be hard cropped due to the “true” in the method call, except the “alt-size” image which has overridden that with a false.
$sizes = array( "thumbnail", "medium", "new-size" => array( "width" => 50, "height" => 50, ), "alt-size" => array( "width" => 120, "height" => 50, "crop" => false, ) ); $query->cacheImageFields("Photos",$sizes,true);
And, here’s the way to get results from the query:
$records = new AirpressCollection($query); foreach($records as $record){ echo $record["Name"]."\n"; foreach($record["Photos"] as $image){ echo $image["url"]; echo $image["thumbnails"]["small"]["url"]; echo $image["thumbnails"]["medium"]["url"]; echo $image["thumbnails"]["alt-size"]["url"]; echo $image["thumbnails"]["large"]["url"]; } echo "<hr>"; }
ENJOY! And please give me any suggestions, bug reports, etc! thanks so much.
Forum: Plugins
In reply to: [Airpress] Image sizesOverview:
cacheImageFields in v1.1.15 will examine the records returned prior to caching them in a transient so that the URL in specified fields can be replaced by local URLs. The goal is not only to allow a convenient way to get “WordPress-sized” images from Airtable, but also to provide a layer of redundancy, not relying on Airtable’s image hosting (which in light of the recent massive Amazon S3 failure could be a really good thing!) This method uses as many of the WordPress API functions as possible while still allowing for complete override and customization of image sizes. Also, I wanted to avoid adding any Airtable data to the WordPress database outside of what Airpress currently does with transients.Usage:
cacheImageFields( mixed $fields [, mixed $sizes, boolean $crop = false, boolean $regenerate = false]);
$fields is a string or an array of strings of Airtable fields names you expect to contain an array of “type”:”image/*” images.
$fields = "My Field Name"
or
$fields = array("My Field Name");
$sizes is an optional string or array of strings or a multi-dimensional array.
$sizes = "full";
$sizes = array("full","thumbnail","medium","large");
$sizes = array("medium","custom-size" => array("width" => 25, "height" => 25, "crop" => true));
$crop is an optional boolean that when true will crop and when false will contain/constrain. $crop can be specified in two places—in the sizes array and in the cacheImageFields call itself. The $crop inside the $sizes array will override the $crop passed in the cacheImageFields method.
$regenerate is an optional boolean that when true will regenerate the given size and/or given fields.
Some examples:
This is a basic $query initialization:$query = new AirpressQuery("Table Name","Configuration Name"); $query->filterByFormula("NOT({Photos} = BLANK())"); $query->fields(array("Name","Photos","Alt Photos"))->maxRecords(5);
Here’s a variety of ways to use the cacheImageFields method
These are the same. They’ll cache/use the full image(s) in the {Photos} field of whatever records are returned
$query->cacheImageFields("Photos"); $query->cacheImageFields("Photos","full"); $query->cacheImageFields(array("Photos"),array("full"));
And This:
$query->cacheImageFields("Photos"); $query->cacheImageFields("Alt Photos");
Is the same as this:
$query->cacheImageFields(array("Photos","Alt Photos"));
This will use the “full” image to create the standard sizes as defined in the WordPress media settings, however it WILL NOT save/serve a local cached copy of the full image since “full” isn’t specified
$query->cacheImageFields("Photos",array("thumbnail","medium","large"));
This will create a WordPress defined “thumbnail” and “medium” image. It will NOT save the full image, but it will obviously have to download it in order to create the smaller sizes, it just won’t be written to disk. It will also create two new arbitrary sizes called “new-size” and “alt-size”. All the sizes will be hard cropped due to the “true” in the method call, except the “alt-size” image which has overridden that with a false.
$sizes = array( "thumbnail", "medium", "new-size" => array( "width" => 50, "height" => 50, ), "alt-size" => array( "width" => 120, "height" => 50, "crop" => false, ) ); $query->cacheImageFields("Photos",$sizes,true);
And, here’s the way to get results from the query:
$records = new AirpressCollection($query); foreach($records as $record){ echo $record["Name"]."\n"; foreach($record["Photos"] as $image){ echo "<img src='{$image["url"]}' />\n"; echo "<img src='{$image["thumbnails"]["small"]["url"]}' />\n"; echo "<img src='{$image["thumbnails"]["medium"]["url"]}' />\n"; echo "<img src='{$image["thumbnails"]["alt-size"]["url"]}' />\n"; echo "<img src='{$image["thumbnails"]["large"]["url"]}' />\n"; } echo "<hr>"; }
ENJOY! And please give me any suggestions, bug reports, etc! thanks so much.
Forum: Plugins
In reply to: [Airpress] Image sizesI have a great (I think) solution just about ready to push live.
If a specific image field is specified in the AirpressQuery, all images will be downloaded to the server and arbitrary custom thumbnail sizes will be generated.
I have it all working, I’m just trying to figure out a more elegant set of API calls to make it work with all included options. For example, you may want additional thumbnail sizes cached, but not the actual image.